Matlab 如何将具有相同列值的行分组?

Matlab 如何将具有相同列值的行分组?,matlab,matrix,grouping,Matlab,Matrix,Grouping,给定3D空间中的坐标矩阵和两个矩阵中两个变量(比如a和b)的值,我想将相同点的行合并到一个公共矩阵中 为了清楚地解释这个问题,假设我们有矩阵 A=[posX, posY, posZ, a] and B=[posX, posY, posZ, b] 并希望将它们组合成 AB = [posX, posY, posZ, a, b] 比如说 A = [0 0 1 1; 0 1 0 4; 5 0 12 8]; B = [0 0 0 5; 0 1 0 3; 5 11 7 7]; 会给 AB = [0

给定3D空间中的坐标矩阵和两个矩阵中两个变量(比如a和b)的值,我想将相同点的行合并到一个公共矩阵中

为了清楚地解释这个问题,假设我们有矩阵

A=[posX, posY, posZ, a]
and 
B=[posX, posY, posZ, b]
并希望将它们组合成

AB = [posX, posY, posZ, a, b]
比如说

A = [0 0 1 1; 0 1 0 4; 5 0 12 8];
B = [0 0 0 5; 0 1 0 3; 5 11 7 7];
会给

AB = [0 0 0 0 5; 0 0 1 1 0; 0 1 0 4 3; 5 0 12 8 0; 5 11 7 0 7];
为了做到这一点,我首先创建了

ATemp = [A, zeros(length(A,0)] 

然后尝试使用函数
accumarray
grpstats
,但未能形成AB矩阵

如果有人提出获得所需矩阵的方法,我将非常感激

AB=union(A(:,1:3),B(:,1:3),'rows');
AB(ismember(AB,A(:,1:3),'rows'),4)=A(:,4);
AB(ismember(AB(:,1:3),B(:,1:3),'rows'),5)=B(:,4)

[编辑]仅当每个(x,y,z)-点在每个矩阵中仅出现一次时,此解决方案才有效。如果有多行,则第二行(和/或第三行)中存在维度不匹配。

是否需要删除AB中第一行之后的重复行?@Dan“UNION(a,B,'rows')[…]返回两个矩阵中的合并行,不重复”我的MATLAB帮助说。此外,我检查了my
AB
是否等于他的
AB
,因此
A
B
中的一个元素显然没有重复项;能否解决您在编辑中突出显示的问题?@Dan联合的结果已经是唯一的。要允许重复坐标,问题定义必须首先“固定”:应为
AB
中的一行选择
A
中的哪一行匹配?或者如果
A
B
中有多个,那么哪个应该与哪个匹配?
AB=union(A(:,1:3),B(:,1:3),'rows');
AB(ismember(AB,A(:,1:3),'rows'),4)=A(:,4);
AB(ismember(AB(:,1:3),B(:,1:3),'rows'),5)=B(:,4)