将矩阵中每行的值乘以columnvector和sum row up

时间:2015-03-14 14:08:39

标签: matlab matrix matrix-multiplication

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

想要使用for循环执行此操作,到目前为止(其中M是矩阵,v是我们开始使用的初始列向量),它返回一个错误,上面写着“Subscripted assignment dimension mismatch。”,所以我我以某种方式搞砸了我的指数:

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

不知道我到目前为止是否接近我所拥有的,但还没有充分考虑到这一点。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

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

我们走了:

%// 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

答案 1 :(得分:1)

不是将每个条目乘以相同的因子然后进行求和,而是先对矩阵的行求和,然后再进行乘法运算。 ("使用乘法的分配属性。")

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

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