我会试着通过一个例子来解释我需要的。在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。感谢您的评论,我应该加上 –