删除 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 的行的索引。
所以我想删除矩阵中包含零的行,但仅限于特定列。例如:
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 的行的索引。