Arrays Matlab中的二维矩阵行交
我将通过一个例子来解释我需要什么 假设有一个矩阵x,如下所示:Arrays Matlab中的二维矩阵行交,arrays,matlab,matrix,vectorization,Arrays,Matlab,Matrix,Vectorization,我将通过一个例子来解释我需要什么 假设有一个矩阵x,如下所示: 1 2 3 4 5 6 1 4 5 7 4 8 1 4 另一个矩阵y如下所示: 1 2 3 4 5 6 1 4 5 7 4 8 1 4 我需要的是(不在行上循环)在x&y中的每两个对应行之间执行交集。我希望得到一个矩阵z,如下所示: 1 2 3 4 5 6 1 4 5 7 4 8 1 4 x和y中的第一行只有1作为公共值。第二行的公共值为4 编辑: 我忘了补充一点,在我的例子中,可以保证相交结果具有相同的长度,实际
1 2 3
4 5 6
1 4 5
7 4 8
1
4
另一个矩阵y如下所示:
1 2 3
4 5 6
1 4 5
7 4 8
1
4
我需要的是(不在行上循环)在x&y中的每两个对应行之间执行交集。我希望得到一个矩阵z,如下所示:
1 2 3
4 5 6
1 4 5
7 4 8
1
4
x和y中的第一行只有1作为公共值。第二行的公共值为4
编辑:
我忘了补充一点,在我的例子中,可以保证相交结果具有相同的长度,实际上长度始终为1。我们的想法是将矩阵放在一起,并在行中查找重复项。查找重复数值的一个方法是
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'
这应该适用于任何数量的可以水平连接的矩阵。它将检测所有重复项,但只有当矩阵中每行有一个且只有一个重复项时,它才会返回与行数相同大小的列。方法是将矩阵放在一起,并在行中查找重复项。查找重复数值的一个方法是
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'
这应该适用于任何数量的可以水平连接的矩阵。它将检测所有重复项,但只有当矩阵中每行有一个且只有一个重复项时,它才会返回与行数相同大小的列。我在想-
样本运行-
运行#1:
运行#2:
我在想-
样本运行-
运行#1:
运行#2:
当一行中有两个公共值时会发生什么?我认为矩阵结果的想法不适用于结果……在我的例子中,它保证了相交结果的长度相同,实际上长度始终为1。谢谢你的评论,我应该把它添加到问题中,当一行中有两个公共值时会发生什么?我认为矩阵结果的想法不适用于结果……在我的例子中,它保证了相交结果的长度相同,实际上长度始终为1。谢谢你的评论,我应该把它添加到question@rayryeng哦,对不起,我猜@rayryeng哈哈,说到使用
bsxfun
,我从不后悔:D@rayryeng哦,对不起,我猜@rayryeng哈哈,说到使用bsxfun,我从不后悔:D