我會試着通過一個例子來解釋我需要的。在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實際上。
我會試着通過一個例子來解釋我需要的。在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實際上。
我想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
的想法是把矩陣一起,來尋找行重複。找到重複的數字值的一個想法是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'
這應該與任意數量的矩陣,可以水平級聯工作。它將檢測到所有重複項,但只有在矩陣中每行只有一個重複項時,它纔會返回與行數相同大小的列。
會發生什麼一行中的常見值?我認爲矩陣結果的想法不適用於結果... – 2015-11-05 18:32:58
在我的情況下,它確保交集結果具有相同的長度,實際上長度總是1。感謝您的評論,我應該加上 –