我有这个矩阵
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时。
答案 0 :(得分:3)
问题是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), :));
答案 1 :(得分:1)
当你乘以向量时,你应该确保执行你想要的操作:
(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
来计算与矢量方向无关的点积。