过滤关于一列中某个条件的矩阵

时间:2015-02-24 11:42:47

标签: arrays matlab matrix conditional-statements

我有一个定义xyz点云的数组。非常简单的是x,y和z,没有其他字段。

我将此加载到matlab中没有问题,但现在需要过滤z值。我想根据首选值删除数组中的行。因此,例如,如果z是<比5删除这一行。我认为简单的方法是在找到符合我标准的行时创建一个新数组。

我试过这个。基本上贯穿整个数组,每次我在我的参数中找到一行时,我想将它写入一个新数组。因此,如果第一个数组有220K列,并且我说我的新数组必须包含大于-5.4的z值,那么我应该有一个包含更少行的新数组。

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

非常简单但不适合我!

2 个答案:

答案 0 :(得分: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 :(得分: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),:) = []