2014-10-30 270 views
1

如果我有一個矩陣是這樣的:刪除矩陣列 - MATLAB

400  450  450  300 
450  300  450  340 
450  200  300  210 
300  100  300  200 
200  200  100  100 
475  300  225  300 

什麼是要刪除的做所有列的最佳方式不包含特定範圍內的數字 - 例如400-500 - 至少兩次或更多。在這個例子中,列B和D將被刪除,因爲B只包含一次在此範圍內的數字,而D在此範圍內不包含任何內容。

所需的輸出將是:

400  450 
450  450 
450  300 
300  300 
200  100 
475  225 

我試圖使用IF語句來掃描每個列,然後繼續比賽到一個新的矩陣,但是這似乎效率不高。

回答

1

假設A是輸入矩陣,你可以使用這個矩陣索引方法 -

A(:,sum(A>=400 & A<=450,1)>=2) 

這必須是一個非常有效的方法,您的問題。

sum(A>=400 & A<=450,1)>=2得到我們一個滿足我們需求的列的邏輯數組,然後我們用它索引到A的列。

注意:如果要刪除的列數與列總數相比是非常小的數字,則可以直接刪除它們而不是索引到匹配列中,以便在特殊情況下使用更有效的方法。所以,在這種情況下,你可以做到這一點 -

A(:,sum(A>=400 & A<=450,1)<2)=[];