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

标签 matlab matrix grouping

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

为了清楚地解释这件事,假设我们有矩阵

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 矩阵。

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

最佳答案

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) 点在每个矩阵中只出现一次时,此解决方案才有效。如果有多个,则第二行(和/或第三行)中存在尺寸不匹配。

关于matlab - 如何对具有相同列值的行进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980104/

相关文章:

math - 根据约束对矩阵进行归一化

c# - 如何旋转 4x4 矩阵 (C#/XNA)

Javascript 数组分组类别

php - MySql - 按姓名和合作伙伴对人员进行排序

c# - 在 C# 中按月对数据进行分组和计数

matlab - 为什么 sscanf 在这里表现得很奇怪?

database - Matlab数据库准备语句和绑定(bind)变量

matlab - 获取快照加速

arrays - matlab数组赋值

python - 确定二维数组中最长连续值范围的最快方法