我们有一个列向量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
不知道我到目前为止是否接近我所拥有的,但还没有充分考虑到这一点。有什么建议吗?
答案 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);