在一列中过滤关于某个条件的矩阵
我有一个定义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
很简单,但不适合我!
简单地做:
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,:)
非常感谢您的明确指示和链接。相当尴尬它的如此简单... – Craig 2015-02-24 12:04:17
@克雷格如果它适合你,不要忘记接受答案! – 2015-02-24 13:20:15
我不太明白,你是如何准确地排列的样子,但也许这将帮助你
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),:) = []
这个问题已经得到解答,但[这里](http://www.mathworks.com/matlabcentral/newsreader/view_thread/289365)是一些人讨论使用的技术。 – 2015-02-24 11:52:27
你的代码不工作,因为你正在用'array(n)'使用线性索引。要选择一行,请使用'array(n,:)'。我建议检查“冒号”操作符和矩阵索引的文档。 – Daniel 2015-02-24 11:52:28
欢迎使用stackoverflow!请考虑接受一个答案(最好回答你的问题的答案)以表明系统,你的问题解决了(左边的绿色复选标记)。 – thewaywewalk 2015-03-04 08:21:16