Possible Duplicates:
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 的 NEW 矩阵,其中列中的每个元素都是相同的,然后逐个元素地进行减法:
M2new = repmat(M2,M,1)
final = M1 - M2new
但是,这是两行代码,并在内存中创建了一个新元素。执行此操作的最快且内存占用最少的方式是什么?
最佳答案
使用 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
替换为您的行向量,就可以了。
关于Matlab - 从[MxN]矩阵元素中快速减去[1xN]数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967940/