【问题标题】:How to replace a column of a specific value with zeros in Matlab?如何在Matlab中用零替换特定值的列?
【发布时间】: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 循环的情况下,有什么聪明的方法可以做到这一点吗?非常感谢所有帮助。

谢谢

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    您可以使用all 查找全为 2 的列

    all2 = all( A == 2, 1 ); % check along first dim
    A(:,all2 ) = 0; % make column zero
    

    如果您想将所有相同编号(不仅是 2)的列设置为零,您可以使用 来协助

    allSame = all( bsxfun( @eq, A, A(1,:) ), 1 );
    A( :, allSame ) = 0;
    

    【讨论】:

    • 你不需要1作为all的第二个运算符,它是默认的。
    • @Divakar 感谢您指出这一点。我个人倾向于明确定义这些默认参数。不过你是对的,可以省略。
    • @Shai - 我同意。我喜欢明确地放入 1 以确保没有歧义,并且它允许阅读我的代码的其他人理解。
    • 显式写默认参数其实可以省去很多麻烦。假设您想对矩阵中的所有列求和,您可以使用sum(A)。但是,如果某个矩阵突然有一天恰好只有一行,那么您只会得到一个数字,从而导致错误并可能破坏您下午的计划。您的工作代码在几周后停止工作,您甚至没有更改任何内容。 (如果你一定要问:是的,它已经发生了)
    • @RobertP。如果这个错误只破坏了下午的计划 - 那么你没关系,对我来说,它需要一整天的时间才能找到......