【问题标题】:Filter a matrix regarding a certain condition in one column在一列中过滤有关特定条件的矩阵
【发布时间】:2015-04-26 00:33:08
【问题描述】:

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

我将它加载到 matlab 中没有问题,但现在需要过滤 z 值。我想根据首选值删除数组中的行。因此,例如,如果 z

我试过这个。基本上遍历整个数组,每次我在参数中找到一行时,我都想将它写入一个新数组。因此,如果第一个数组有 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

非常简单,但不适合我!

【问题讨论】:

  • 问题已经回答了,但是here是一些人在讨论使用的技术。
  • 您的代码无法正常工作,因为您正在使用带有array(n) 的线性索引。要选择一行,请使用array(n,:)。我建议查看colon 运算符和矩阵索引的文档。
  • 欢迎来到stackoverflow!请考虑接受一个答案(最能回答您的问题的那个),以表明系统已解决您的问题(左侧的绿色复选标记)。

标签: arrays matlab matrix conditional-statements


【解决方案1】:

简单地做:

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-th 列中的值大于X 的行的线性索引

mask = data(:,n) > X

然后你用那个掩码过滤你的数据:

out = data(mask,:)

【讨论】:

  • 非常感谢您提供清晰的说明和链接。这么简单就尴尬了……
  • @Craig 如果它适合你,别忘了接受答案!
【解决方案2】:

我不太明白,你的数组到底长什么样,但也许这会对你有所帮助

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),:) = []

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多