让
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 的情况下做到这一点,是否有任何简单的命令?
>> 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 就会扩展该向量以匹配矩阵的大小。请参阅基本操作的兼容数组大小。
>> 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句