删除 Matlab 中特定列的 0 行

Delete rows with 0 for specific columns in Matlab

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

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 检查第二 and/or 第 4 列是否包含零。如果是这样:则删除整行。所以结果应该是:

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

我使用了这个功能:

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

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

你可以写

>>> 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)

这很容易使用 find() 函数解决:

B = A(find(A(:,2)~=0),:)

find() 默认 returns 行,所以在这种情况下调用它 returns 第二列的值不为 0 的行的索引。