2013-02-05 45 views
0

我有一個有n行和3列的矩陣。讓稱它爲A=[23 45 6;32 4 78;67 5 34; 54 1 4;6 9 2]如何在Matlab中找到基於某些列與基於集合(查詢矩陣)相等的索引

現在我有一組點:B={ P1=[X1,Y1] P2=[X2,Y2] ... }= { [6 9] [32 4] }

我想設置矩陣A,使其返回我的行(I)中的所有設置B的索引的查詢:

Pk(1,1) (or Xk) == A(i,1) && Pk(1,2) (or Yk) == A(i,2) 

換句話說,設置查詢基於在A塔1 & & 2,並用B他們相比,所以輸出是具有在欄1和2與值Xk相同值的行的索引, Yk在B

輸出:以矩陣形式5,2

回答

1

將B爲好,例如:

B=[6 9; 32 4]; 

這裏要說的是,你可以使用MATLAB代碼來做到這一點:

k=0; 
output=[]; 
for n=1:5 
    for m=1:2 
    if (sum(A(n,1:2)==B(m,:)) == 2) 
     k = k +1; 
     output(k) = n; 
    end 
    end 
    end 

你的結果在output


編輯:

我加入行(sum(A(n,1:2)==B(m,:)) == 2)的解釋。讓我們一塊一塊地看它。 A(n, 1:2)給了我們一個1x2向量,它是A第n行的前兩列。 B(m,:)也是1x2向量,因爲B只有兩列。因此,假設我們現在有[6 9],從B的第一行開始,最後一行A[6 9]

在命令行中嘗試[6 9] == [6 9]。結果是一個邏輯向量:[1 1]。原因是==會逐個比較向量。所以第一個1是因爲6等於6,第二個告訴我們9等於。如果你嘗試[6 9] == [7 9],你會得到[0 1],因爲現在第一個元素是不同的。

因此,爲了評估兩個元素是否相同,我們期望從==算子得到的向量之和等於2。如果它等於1,那麼只有一個元素是相同的,我們需要它是2來表示整個向量相等(2是因爲向量只有2個元素)。所以sum([6 9] == [6 9])給出2sum([7 9] == [6 9])只給出1

因此以測試行的平等條件爲if (sum(A(n,1:2)==B(m,:)) == 2)

+1

這是什麼線爲 「如果(總和(A(N,1:2)== B(米,:))= 2)」? 而不應該= ==而不是= 2? –

+0

是的,它應該==而不是=。 – TJ1

+0

該行顯示A的第n行的第一列和第二列的元素均等於B的第m行的第1列和第2列。 – TJ1

2

製作乙通過@ TJ1

B=[6 9; 32 4]; 

建議只需使用intersect with the rows options的矩陣(和第二輸出)

[~, i, ~] = intersect(A(:, 1:2), B, 'rows') 

我已經從A的前2列索引,因爲你只對那些列感興趣,而且顯然想要相交兩個矩陣具有相同的列數。

其結果是:

i = 

    5 
    2