【发布时间】:2016-07-14 14:28:09
【问题描述】:
我想让 MATLAB 执行矩阵乘法,其中所有乘法运算都替换为加法运算。
这是一个例子:
a = [3,4; 5,6];
b = [1;2];
c = modified_multiplication(a,b); % = [3+1+4+2 ; 5+1+6+2] = [10 , 14].
我怎样才能像原来的 * 操作一样高效?
【问题讨论】:
标签: matlab matrix multiplication
我想让 MATLAB 执行矩阵乘法,其中所有乘法运算都替换为加法运算。
这是一个例子:
a = [3,4; 5,6];
b = [1;2];
c = modified_multiplication(a,b); % = [3+1+4+2 ; 5+1+6+2] = [10 , 14].
我怎样才能像原来的 * 操作一样高效?
【问题讨论】:
标签: matlab matrix multiplication
您最好的选择是将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的应用,对各列求和。
【讨论】:
对于任意大小的a和b,可以如下进行:
c = bsxfun(@plus, sum(a,2), sum(b,1));
这利用了加法的关联属性:首先计算a 的每一行和b 的每一列的总和,然后计算所有成对的加法。
【讨论】: