可能重复:
How to subtract a vector from each row of a matrix?
How can I divide each row of a matrix by a fixed row?
我有M行和4列的矩阵(M1)。我有另一个1行和4列的数组(M2)。我想通过M2中各自的列元素减去M1中的每个元素。换句话说,M1的每列需要由M2中相同列位置的标量子跟踪。我可以调用repmat(M2,M,1)
,这将创建一个大小为MxN的新矩阵,其中列中的每个元素都是相同的,然后按元素减法执行元素:
M2new = repmat(M2,M,1)
final = M1 - M2new
然而,,这是两行代码并在内存中创建一个新元素。执行此操作的最快且内存最少的方法是什么?
答案 0 :(得分:14)
使用bsxfun
,如以下示例所示。
x=magic(4);
y=x(1,:);
z=bsxfun(@minus,x,y)
z =
0 0 0 0
-11 9 7 -5
-7 5 3 -1
-12 12 12 -12
这里z
是通过从每一行中减去第一行得到的。只需将x
替换为矩阵,将y
替换为行向量,然后全部设置。
答案 1 :(得分:14)
bsxfun(.)
可能更有效率,但个人作为旧计时器,我建议不要完全忽略基于线性代数的解决方案,例如:
> M1= magic(4)
M1 =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
> M2= M1(1, :)
M2 =
16 2 3 13
> M1- ones(4, 1)* M2
ans =
0 0 0 0
-11 9 7 -5
-7 5 3 -1
-12 12 12 -12
让实际用例和分析器决定实际使用的功能。