错误的矩阵乘法导致元素数量不相同

时间:2017-05-25 18:01:09

标签: matlab matrix numbers element

我有这个矩阵

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时。

2 个答案:

答案 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 1fvsim(lingsim(i), :)是行向量,即1 x n。因此,您正在计算外部产品

如果这不是您想要的,您可以使用转置(.')或内置函数dot来计算与矢量方向无关的点积。