2017-09-19 73 views
-1

我有一個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

回答

0

你的代碼是正確的

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