我有一个定义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
非常简单但不适合我!
答案 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),:) = []