2015-11-05 115 views
1

我會試着通過一個例子來解釋我需要的。在Matlab中Rowwise 2維矩陣相交

假設你有一個x矩陣如下:

1 2 3 
4 5 6 

而另一矩陣Y如下:

1 4 5 
7 4 8 

我需要的是(不遍歷行)執行之間的交點x中的每2個相應的行。所以,我希望得到一個矩陣Z如下:

1 
4 

X中的第1行和y只有1個爲公共值。第二行有4個公共值。

編輯: 我忘了補充一點,在我的情況下,保證了相交結果將具有相同的長度和長度總是1實際上。

+2

會發生什麼一行中的常見值?我認爲矩陣結果的想法不適用於結果... – 2015-11-05 18:32:58

+0

在我的情況下,它確保交集結果具有相同的長度,實際上長度總是1。感謝您的評論,我應該加上 –

回答

4

我想bsxfun -

y(squeeze(any(bsxfun(@eq,x,permute(y,[1 3 2])),2))) 

樣品試驗 -

運行#1:

>> x 
x = 
    1  2  3 
    4  5  6 
>> y 
y = 
    1  4  5 
    7  4  8 
>> y(squeeze(any(bsxfun(@eq,x,permute(y,[1 3 2])),2))) 
ans = 
    1 
    4 

運行#2:當你有兩個

>> x 
x = 
    3  5  7  9 
    2  7  9  0 
>> y 
y = 
    6  4  3 
    6  0  2 
>> y(squeeze(any(bsxfun(@eq,x,permute(y,[1 3 2])),2))) 
ans = 
    0 
    3 
    2 
+0

D'oh這個問題。我正要發佈這個笑聲。 +1。 – rayryeng

+0

@rayryeng嗯,對不起,我猜! ;) – Divakar

+0

不,你不是:(大聲笑 – rayryeng

0

的想法是把矩陣一起,來尋找行重複。找到重複的數字值的一個想法是diff他們;結果中重複項將由值0標記。

導致:

%'Initial data' 
A = [1 2 3; 8 5 6]; 
B = [1 4 5; 7 4 8]; 

%'Look in merged data' 
V = sort([A,B],2);  %'Sort matrix values in rows' 
R = V(diff(V,1,2)==0); %'Find duplicates in rows' 

這應該與任意數量的矩陣,可以水平級聯工作。它將檢測到所有重複項,但只有在矩陣中每行只有一個重複項時,它纔會返回與行數相同大小的列。