2015-02-24 70 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),:) = []