在Matlab中找到匹配多列上的多个条件的矩阵行

问题描述:

我有一个3xn矩阵A,列x,y和z。如何找到X1> x> X2 AND Y1> y> Y2(其中X1,X2,Y1和Y2在x-y网格上定义一个框)的所有行?在Matlab中找到匹配多列上的多个条件的矩阵行

我已经尝试过,没有工作下列方法:

Abox = A(A(:,1)<X1 & A(:,1)>X2 & A(:,2)<Y1 & A(:,2)>Y2,:)); 

indices = find(A(:,1)<X1 & A(:,1)>X2 & A(:,2)<Y1 & A(:,2)>Y2); 
Abox = A(indices,:); 

都返回空数组。

Axrange = A(A(:,1)<X1 & A(:,1)>X2,:)); 
Abox = Axrange(Axrange(:,2)<Y1 & Axrange(:,2)>Y2,:); 

为第一行返回一个填充数组,然后为第二行返回一个空数组。

+2

您需要的代码与您所写的文本非常相似。你有什么尝试? –

+0

上面的问题[在Matlab中查找匹配两个条件的矢量元素](https://stackoverflow.com/questions/8378807/find-vector-elements-matching-two-conditions-in-matlab)不包括多个条件多个相同矩阵的列,只有一个列上的多个条件。我认为我遇到的问题是由于多栏。 – Dandan

+0

我添加了一些笔记,关于我已经尝试过的原始问题。 – Dandan

你的代码是正确的

find(A(:,1)<X1 & A(:,1)>X2 & A(:,2)<Y1 & A(:,2)>Y2) 

然而,这个返回匹配行的索引。您需要使用它来获取实际行:

indices = find(A(:,1)<X1 & A(:,1)>X2 & A(:,2)<Y1 & A(:,2)>Y2) 
A2 = A(indices,:) 
+0

我刚刚更新了这个问题来解决这个问题......对不起,我应该已经更清楚了,我已经做了这个,但'find'返回了一个空矩阵。 – Dandan

+0

这适用于我的示例数组。确保数组中有符合条件的行。如果'find'返回一个空列表,则表示没有值符合条件。 – Aziz

+0

好的,我想通了......在我的代码中有一个更高的错误,这个错误正在改变用来设置条件的值。感谢说服我调试并发现! – Dandan