2015-11-05 114 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' 

这应该与任意数量的矩阵,可以水平级联工作。它将检测到所有重复项,但只有在矩阵中每行只有一个重复项时,它才会返回与行数相同大小的列。