2011-03-09 124 views
0

我想從維2 * n矩陣的開頭有效地刪除大量數據。矩陣如下所示:有效刪除矩陣元素

x1 x2 
x3 x4 
... 
... 

我想刪除有一個排比一些數量少的第一個元素的所有行,並停止當行按數字順序不小(其中的元件)

我目前做的慢是:

while 1 
    if list{i}(1) <= someNumber 
     list{i}(1,:) = [] 
    else 
     break; 
    end 
end 

必須有MATLAB很快這樣做的簡潔的方式?

謝謝。

回答

2

一種方法是隻比較整個第一柱一氣呵成,然後刪除,即

rows2delete = list{i}(:,1) <= someNumber; %# creates logical array with 1 for deletion 
list{i}(rows2delete,:) = []; %# delete some rows, all corresponding cols 
+0

真棒喬納斯,這就是我需要的。我知道必須有一種很好的方式才能讓MatLab做到這一點,但它不是我的一種語言:)。將在最短時間過後接受。謝謝你,很多時間刮鬍子。 – ale

+0

@ vivid-colors:btw,如果你需要爲列表中的所有單元格執行此操作,可以使用'cellfun'作爲單行:'list = cellfun(@(x)x(x(:,1) > someNumber,:),列表 'uniformOutput',假)'。這會爲'list'中的每個數組保留第一個值大於'someNumber'的行。 – Jonas

+0

感謝您的幫助..真的幫助了我。我剛剛發佈了一個您可能感興趣的類似問題,我需要學習如何在MATLAB中更好地完成這些事情。 – ale