删除Matlab中特定列的0行

时间:2016-03-04 10:42:03

标签: matlab matrix delete-row

所以我想删除包含零的矩阵行,但仅限于特定列。例如:

A = [[0 0 0 0; 1 2 0 4; 2 0 1 1; 0 0 0 0; 1 2 3 4; 0 1 2 3];

我希望矩阵A检查第二列和/或第四列是否包含零。如果是这样:然后删除整行。所以结果应该是:

A = [1 2 0 4; 1 2 3 4; 0 1 2 3];

我使用了这个功能:

new_a = A(all(A,2),:) 

但是我删除了包含零的所有行。

2 个答案:

答案 0 :(得分:1)

你可以写

>>> secondColIsNonzero = A(:, 2) ~= 0;
>>> fourthColIsNonzero = A(:, 4) ~= 0;
>>> keep = secondColIsNonzero & fourthColIsNonzero;
>>> newA = A(keep, :)
newA =
     1     2     0     4
     1     2     3     4
     0     1     2     3

保持(即不删除)第2列或第4列均为零的列。

对于较不详细的解决方案,请考虑同时为两列添加索引并使用带有维度参数的all

keep = all(A(:, [2 4]) ~= 0, 2)

答案 1 :(得分:0)

使用find()函数

可以轻松解决这个问题
B = A(find(A(:,2)~=0),:)

find()默认返回行,因此在这种情况下调用它会返回第二列上的值不为0的行的索引。