2016-03-04 37 views
0

所以我想刪除包含零的矩陣的行,但僅限於特定的列。例如:在Matlab中刪除特定列的行爲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檢查第二列和/或第四列是否包含零。如果這是真的,那麼刪除整行。所以結果應該是:

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

我用這個功能:

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

但我刪除包含零的所有行。

回答

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

感謝您的回答,現在我對我的問題有一個擴展。例如,現在我想讓第2列和第4列爲零,我想要這些行超出矩陣。所以新的矩陣應該是:A = [1 2 0 4; 2 0 1 1; 1 2 3 4; 0 1 2 3];你能幫我解碼嗎?非常感謝 – user5424264

+0

然後,要保留所有那些至少有一個col2或col4非零的列。這可以表示爲:keep = any(A(:,[2 4])〜= 0,2) – Derek

0

此使用find()功能很容易解決:

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

find()默認返回行,所以在這種情況下調用它將返回第二列值不爲0的行的索引。