Matlab中的行二维矩阵交集

时间:2015-11-05 18:29:26

标签: arrays matlab matrix vectorization

我将尝试通过一个例子来解释我需要的东西。

假设您有一个矩阵x,如下所示:

1 2 3
4 5 6

另一个矩阵如下:

1 4 5
7 4 8

我需要的是(没有遍历行)以在x和amp;中的每两个相应行之间执行交集。年。所以我希望得到一个矩阵z如下:

1
4

x和y中的第1行只有1作为公共值。第2行有4个作为公共值。

修改 我忘了补充说,在我的情况下,保证交叉点结果的长度相同,实际长度总是1。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

想法是将矩阵放在一起并在行中查找重复项。找到重复数值的一个想法是[ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName": "Jones" } ] 他们;重复项将在结果中用值0标记。

导致:

diff

这适用于可以水平连接的任意数量的矩阵。它将检测所有重复项,但只有当矩阵中每行只有一个副本时,它才会返回与行数相同的列。