如何对具有相同列值的行进行分组?

时间:2013-02-20 12:41:26

标签: matlab matrix grouping

给定三维空间中坐标的矩阵和两个矩阵中两个变量(比如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)] 

BTemp = [B(:, [1 2 3]), zeros(length(B),1), B(:,4)]

然后尝试使用函数accumarraygrpstats,但尚未设法形成AB矩阵。

如果有人建议如何获得所需的矩阵,我将非常感激。

1 个答案:

答案 0 :(得分:1)

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)

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