簡體   English   中英

Matlab中的行式二維矩陣交集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM