我有一个基于行和列的大型矩阵数据,我想在MATLAB中删除所有包含所有值0
的列。
答案 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));