MATLAB通过给定的向量减去矩阵的每一行

时间:2018-05-22 23:14:02

标签: matlab matrix subtraction

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 ,我怎么能这样做,是否有任何简单的命令?

2 个答案:

答案 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