让
M = | 1 2 3 |
| 4 5 6 |
| 7 8 9 |
和
V = | 1 1 1 |
我想从M的每一行中减去V,这样M应该看起来像
M = | 0 1 2 |
| 3 4 5 |
| 6 7 8 |
如果不使用 for ,我怎么能这样做,是否有任何简单的命令?
答案 0 :(得分:2)
您也可以使用 bsxfun 。
M = [1 2 3 ; 4 5 6 ; 7 8 9] ;
V = [1 1 1] ;
iwant = bsxfun(@minus,M,V)
答案 1 :(得分:0)
>> M = [1 2 3; 4 5 6; 7 8 9];
>> V = [1 1 1];
>> MV = M-repmat(V,size(M,1),1)
MV =
0 1 2
3 4 5
6 7 8
对repmat的调用以M中的行数重复向量V.
用户beaker指出,在最近的MATLAB版本中,更简单(虽然有点模糊)的语法也适用。如果从矩阵中减去向量,只要向量的一个维度与矩阵维度匹配,MATLAB将扩展向量以匹配矩阵的大小。见Compatible Array Sizes for Basic Operations。
>> M-V
ans =
0 1 2
3 4 5
6 7 8
当然,如果你知道V将包含所有1,那么解决方案就更简单了:
>> MV = M-1
MV =
0 1 2
3 4 5
6 7 8