从矩阵中删除所有那些包含所有值的列是' 0'在matlab中

时间:2017-01-30 17:08:27

标签: matlab

我有一个基于行和列的大型矩阵数据,我想在MATLAB中删除所有包含所有值0的列。

1 个答案:

答案 0 :(得分:1)

您可以使用all和第二个输入来检查哪些列全部为零。当给定列的所有行满足条件时,这将返回logical数组true,否则返回false。然后,您可以使用结果的反转作为逻辑索引,仅选择不满足此条件的列

data = data(:, ~all(data == 0, 1));

或者,您可以以类似的方式使用any。当列中的任何行满足条件时,any将返回true的逻辑数组,否则将返回false

data = data(:, any(data ~= 0, 1));

此内容可以进一步简化,但内部any会将data转换为logical值,将任何非零值转换为true且任何零值变成'假。

data = data(:, any(data, 1));

如果您正在使用浮点数,那么您将要使用非常小的epsilon,而不是将数字直接与0

进行比较
data = data(:, ~all(abs(data) < eps, 1));
data = data(:, any(abs(data) > eps, 1));