【问题标题】:How to group rows with same column values?如何对具有相同列值的行进行分组?
【发布时间】:2013-02-05 11:15:38
【问题描述】:

考虑到矩阵在 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)] 

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

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

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

【问题讨论】:

    标签: matlab matrix grouping


    【解决方案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)
    

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

    【讨论】:

    • 不需要去掉 AB 中第一行之后的重复行吗?
    • @Dan "UNION(A,B,'rows') [...] 返回两个矩阵的组合行,没有重复“我的 MATLAB 帮助说。此外,我检查了我的AB 是否等于他的AB,因此AB 中的一个元素显然没有重复。
    • 独特(联合(A(:,1:3),B(:,1:3),'rows');,'rows');会解决您在编辑中突出显示的问题吗?
    • @Dan union 的结果已经是唯一的。为了允许重复坐标,必须首先“修复”问题定义:应该为AB 中的那一行选择A 的哪一匹配行?或者如果AB有几个,应该和哪个匹配?
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多