[英]Rowwise 2 dimensional matrix intersection in Matlab
我將嘗試通過一個例子來解釋我所需要的。
假設您有一個矩陣x,如下所示:
1 2 3
4 5 6
而另一個矩陣y如下:
1 4 5
7 4 8
我需要的是(不循環遍歷行)以在x和y中的每2個相應行之間執行交集。 所以我希望得到一個矩陣z,如下所示:
1
4
x和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'
這應適用於可水平連接的任意數量的矩陣。 它將檢測所有重復項,但是只有在矩陣中每行只有一個且只有一個重復項的情況下,它才會返回與行數相同大小的列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.