若矩阵某列含零元素则整列置零,是否有对应实现函数?
解决矩阵含零列置零的问题
当然可以实现啦!不用找专门的内置函数,在MATLAB里一行代码就能搞定这个需求,简单又高效。先明确你的需求:遍历矩阵的每一列,只要该列存在零元素,就把整列都设为0。针对你给出的矩阵:
B = [16 0 3 13;5 11 10 0;9 0 6 12;4 14 15 1];
核心实现代码
直接用这一行代码就能完成任务:
B(:, any(B == 0, 1)) = 0;
代码逻辑拆解
让我一步步解释这段代码的工作原理:
B == 0:生成一个和B尺寸完全相同的逻辑矩阵,矩阵里的true(或1)对应原矩阵中值为0的位置,false(或0)对应非0的位置。any(B == 0, 1):any函数的第二个参数1表示沿着行方向检查每一列。这个操作会返回一个行向量,其中每个元素对应原矩阵的一列:如果该列存在至少一个0,对应位置就是true,否则是false。B(:, 列索引):通过前面得到的逻辑行向量作为列索引,选中所有行和符合条件的列,最后把这些选中的列全部赋值为0。
运行结果
执行完代码后,你的矩阵B会变成:
16 0 3 0 5 0 10 0 9 0 6 0 4 0 15 0
额外提示
如果你的矩阵里有近似0的浮点数(比如由于计算误差产生的极小值),直接用B == 0可能会漏判,这时候可以用精度阈值来判断:
B(:, any(abs(B) < eps, 1)) = 0;
这里eps是MATLAB里的机器精度,代表当前系统能区分的最小非零数,用它来判断数值是否接近0会更稳妥。
内容的提问来源于stack exchange,提问作者Lawa
相关产品推荐
相关产品推荐

