2015-02-24 68 views
1

我有一個定義xyz點雲的數組。很簡單,x,y和z沒有其他字段。在一列中過濾關於某個條件的矩陣

我加載到matlab沒有問題,但現在需要過濾z值。我想根據首選值刪除數組中的行。因此,例如如果z是<比5刪除此行。我認爲簡單的方法是在找到符合我的標準的行時創建一個新的數組。

我試過了。基本上遍歷整個數組,每次我在我的參數Id中找到一行,就像將它寫入一個新數組。所以,如果第一個數組有220K列,並且我說我的新數組必須將conatin z值大於-5.4,那麼我應該有一個新行數少的行。

length = size (array, 1) 
newarray= [] 
b=0; 
for n = 1:length 
    if array(n, 3) > -5.4 %I want to remove anything greater than -5.4 in the %third column 
%newarray = [newarray; array(n)]; 
    b = b+1 
    end 
end 

很簡單,但不適合我!

+0

這個問題已經得到解答,但[這裏](http://www.mathworks.com/matlabcentral/newsreader/view_thread/289365)是一些人討論使用的技術。 – 2015-02-24 11:52:27

+0

你的代碼不工作,因爲你正在用'array(n)'使用線性索引。要選擇一行,請使用'array(n,:)'。我建議檢查「冒號」操作符和矩陣索引的文檔。 – Daniel 2015-02-24 11:52:28

+0

歡迎使用stackoverflow!請考慮接受一個答案(最好回答你的問題的答案)以表明系統,你的問題解決了(左邊的綠色複選標記)。 – thewaywewalk 2015-03-04 08:21:16

回答

4

簡單地做:

data = [ 1 2 7; 
     1 3 3; 
     1 2 8 ] 

out = data(data(:,3) >= 5,:) 

返回

data = 
    1  2  7 
    1  3  3 
    1  2  8 


out = 
    1  2  7 
    1  2  8 

看一看那篇文章有關matrix indexing

您首先需要創建一個面具,你想去的地方在n列對應的值都大於X

mask = data(:,n) > X 

行的線性指標,然後你與面具過濾數據:

out = data(mask,:) 
+1

非常感謝您的明確指示和鏈接。相當尷尬它的如此簡單... – Craig 2015-02-24 12:04:17

+1

@克雷格如果它適合你,不要忘記接受答案! – 2015-02-24 13:20:15

1

我不太明白,你是如何準確地排列的樣子,但也許這將幫助你

a=[1 2 3; 4 5 6; 1 2 7; 1 2 1; 3 2 1; 4 8 10; 2 3 1; 5 4 48]; 
a((a(:,3)>6),:) = []