我想让MATLAB执行矩阵乘法,其中所有乘法运算都被加号运算取代。
以下是一个例子:
a = [3,4; 5,6];
b = [1;2];
c = modified_multiplication(a,b); % = [3+1+4+2 ; 5+1+6+2] = [10 , 14].
我怎样才能像原始*操作一样高效?
答案 0 :(得分:1)
最好的办法是将bsxfun
与sum
合并。
c = sum(bsxfun(@plus, a, b.'), 1);
% 10 14
bsxfun
调用将b
的第一个条目添加到a
的第一行中的所有元素,将b
的第二个条目添加到第二行中的所有元素一行a
等等。
bsxfun(@plus, a, b.')
% 4 6
% 6 8
然后sum
的应用,对列进行求和。
答案 1 :(得分:1)
对于任意大小的a
和b
,可按以下方式完成:
c = bsxfun(@plus, sum(a,2), sum(b,1));
这会利用加法的关联属性:首先计算a
的每一行和b
的每一列的总和,然后计算所有成对加法。