【发布时间】:2025-12-03 20:05:02
【问题描述】:
我有一个像这样的矩阵:
A=
1 2 7 4
3 2 8 5
2 2 9 6
并且想要将只有 2 的列归零并得到类似的结果:
A=
1 0 7 4
3 0 8 5
2 0 9 6
在没有两个 for 循环的情况下,有什么聪明的方法可以做到这一点吗?非常感谢所有帮助。
谢谢
【问题讨论】:
我有一个像这样的矩阵:
A=
1 2 7 4
3 2 8 5
2 2 9 6
并且想要将只有 2 的列归零并得到类似的结果:
A=
1 0 7 4
3 0 8 5
2 0 9 6
在没有两个 for 循环的情况下,有什么聪明的方法可以做到这一点吗?非常感谢所有帮助。
谢谢
【问题讨论】:
您可以使用all 查找全为 2 的列
all2 = all( A == 2, 1 ); % check along first dim
A(:,all2 ) = 0; % make column zero
如果您想将所有相同编号(不仅是 2)的列设置为零,您可以使用 bsxfun 来协助
allSame = all( bsxfun( @eq, A, A(1,:) ), 1 );
A( :, allSame ) = 0;
【讨论】:
1作为all的第二个运算符,它是默认的。
sum(A)。但是,如果某个矩阵突然有一天恰好只有一行,那么您只会得到一个数字,从而导致错误并可能破坏您下午的计划。您的工作代码在几周后停止工作,您甚至没有更改任何内容。 (如果你一定要问:是的,它已经发生了)