错误的矩阵乘法导致元素数量不相同
Wrong matrix multiplication causes number of elements not being the same
我有这个矩阵
mpsim =
1.0e+04 *
-2.2331
-0.4261
1.3810
3.1880
4.9951
6.8022
8.6092
这个矩阵
fvsim =
NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN
0 0 0.9000 0.1000 0 0 0
0 0 0 0.7500 0 0.2500 0
0 0 0 0 0 1.0000 0
0 0 0 0 0.5000 0 0.5000
0 0 0 0 0 0 1.0000
和这个矩阵
lingsim =
3
3
3
3
3
3
3
3
3
3
4
4
4
4
6
5
6
7
7
我正在尝试使用此代码但出现错误
sizeA=size(mpsim,1);
sizeB=size(fvsim,1);
sizeC=size(lingsim,1);
outputsim = zeros(size(lingsim));
for i=1:sizeC
if lingsim(i)<=sizeB
outputsim(i)=sum(mpsim * fvsim(lingsim(i), :));
else
outputsim(i)=lingsim(i);
end
end
outputsim
In an assignment A(I) = B, the number of elements in B and I must be the same.
Error in ftskutes (line 131)
outputsim(i)=sum(mpsim * fvsim(lingsim(i), :));
如何解决这个问题?实际上我假设 sum(mpsim * fvsim(lingsim(i), :));
是 1x1 但当我尝试检查它时它是 1x7.
问题是 sum() 仅适用于一维 - 因此 mpsim * fvsim(lingsim(i), :)
生成一个 7x7 矩阵,然后在其中取列总和,得到 1x7 向量。
要获取所有元素的总和,可以使用
if lingsim(i)<=sizeB
outputsim(i)=sum(sum(mpsim * fvsim(lingsim(i), :)));
else
编辑:
我以为你是故意拿外层产品的。但是,如果您想将每个元素彼此相乘,则必须将 * 替换为 .* 并转置两个向量之一:
outputsim(i)=sum(mpsim' .* fvsim(lingsim(i), :));
当你乘以向量时,你应该确保执行你想要的操作:
- 外积:
(n x 1) * (1 x n) == (n x n)
- 内(点)积:
(1 x n) * (n x 1) == (1 x 1)
- 元素乘积:
(n x 1) .* (n x 1) == (n x 1)
mpsim
为列向量,即n x 1
,fvsim(lingsim(i), :)
为行向量,即1 x n
。因此,您正在计算 外积。
如果这不是您想要的,您可以采用转置 (.'
) 或内置函数 dot
来计算独立于向量方向的点积。
我有这个矩阵
mpsim =
1.0e+04 *
-2.2331
-0.4261
1.3810
3.1880
4.9951
6.8022
8.6092
这个矩阵
fvsim =
NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN
0 0 0.9000 0.1000 0 0 0
0 0 0 0.7500 0 0.2500 0
0 0 0 0 0 1.0000 0
0 0 0 0 0.5000 0 0.5000
0 0 0 0 0 0 1.0000
和这个矩阵
lingsim =
3
3
3
3
3
3
3
3
3
3
4
4
4
4
6
5
6
7
7
我正在尝试使用此代码但出现错误
sizeA=size(mpsim,1);
sizeB=size(fvsim,1);
sizeC=size(lingsim,1);
outputsim = zeros(size(lingsim));
for i=1:sizeC
if lingsim(i)<=sizeB
outputsim(i)=sum(mpsim * fvsim(lingsim(i), :));
else
outputsim(i)=lingsim(i);
end
end
outputsim
In an assignment A(I) = B, the number of elements in B and I must be the same. Error in ftskutes (line 131) outputsim(i)=sum(mpsim * fvsim(lingsim(i), :));
如何解决这个问题?实际上我假设 sum(mpsim * fvsim(lingsim(i), :));
是 1x1 但当我尝试检查它时它是 1x7.
问题是 sum() 仅适用于一维 - 因此 mpsim * fvsim(lingsim(i), :)
生成一个 7x7 矩阵,然后在其中取列总和,得到 1x7 向量。
要获取所有元素的总和,可以使用
if lingsim(i)<=sizeB
outputsim(i)=sum(sum(mpsim * fvsim(lingsim(i), :)));
else
编辑: 我以为你是故意拿外层产品的。但是,如果您想将每个元素彼此相乘,则必须将 * 替换为 .* 并转置两个向量之一:
outputsim(i)=sum(mpsim' .* fvsim(lingsim(i), :));
当你乘以向量时,你应该确保执行你想要的操作:
- 外积:
(n x 1) * (1 x n) == (n x n)
- 内(点)积:
(1 x n) * (n x 1) == (1 x 1)
- 元素乘积:
(n x 1) .* (n x 1) == (n x 1)
mpsim
为列向量,即n x 1
,fvsim(lingsim(i), :)
为行向量,即1 x n
。因此,您正在计算 外积。
如果这不是您想要的,您可以采用转置 (.'
) 或内置函数 dot
来计算独立于向量方向的点积。