将矩阵中每一行的值与列向量相乘并对行求和

Multiply values of every row in matrix with columnvector and sum rows up

我们有一个列向量 m x 1 和一个矩阵 m x n。 对于列向量中第 i 行中的值,我们希望将该值与矩阵中同一行中的每个值相乘,然后将所有这些相加。这将对向量中的每一行 i 重复,以便我们最终得到一个列向量。

想用 for 循环来做到这一点,到目前为止(其中 M 是矩阵,v 是我们开始的初始列向量)returns 一个错误说 "Subscripted assignment dimension mismatch.", 所以我想我搞砸了我的指数:

for i = 1:nv
    for k = 1:mM
        columnvectorendresult(i,) = columnvectorendresult(i,) + v(i,:)*M(i,:); 
    end
end

不知道我是否了解目前的情况,但还没有完全了解。有什么建议吗?

如果你想在乘法后求和使用分配属性乘法是合乎逻辑的选择。如果您想使用除求和或求差以外的其他操作,则可以更普遍地应用以下答案

开始吧:

%// columnvector m x 1
a = randi(5,3,1)
%// matrix m x n
B = randi(5,3,2)

%// multiplication
Ba = bsxfun(@times,B,a(:))

%// sum
BaSum = sum(Ba,2)

示例:

a =
     3
     4
     4


B =
     2     5
     3     1
     1     1


Ba =
     6    15
    12     4
     4     4


BaSum =
    21
    16
     8

与其将每个条目乘以相同的因子然后进行求和,不如先对矩阵的行求和然后进行乘法。 ("Use the distributive property of multiplication.")

这是您在 MATLAB 中执行此操作的方法:

columnvectorendresult = v.*sum(M,2);