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

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 1fvsim(lingsim(i), :)为行向量,即1 x n。因此,您正在计算 外积

如果这不是您想要的,您可以采用转置 (.') 或内置函数 dot 来计算独立于向量方向的点积。