gpt4 book ai didi

matlab - 删除矩阵中第一个二维中的重复项,matlab

转载 作者:行者123 更新时间:2023-12-04 05:20:49 26 4
gpt4 key购买 nike

我有一个大小为 3XN 的矩阵。矩阵中的每一列都是一个 3d 点。我想
删除重复项,我只关心前二维中的重复项。
如果存在重复点(即 x,y 相同),我想选择第 3 维(z 坐标)中具有最高值的点。
例如:
(前 2 个维度是前 2 行)

M = [ 1 1 1 2 3 4 5 5 ;
4 4 4 6 6 3 2 2 ;
3 4 5 3 4 5 7 8 ];
^ ^ ^ ^ ^

我想得到:
Res = [ 1 2 3 4 5 ;
4 6 6 3 2 ;
5 3 4 5 8]

我需要它尽可能快地工作,因为矩阵非常大。所以,如果可能的话,不用排序。我正在寻找一个matlab“快捷方式”来做到这一点,而不需要循环或排序。
谢谢
马特拉比特

最佳答案

这可以通过 accumarray 轻松高效地完成:

% - choose pairs of row/column indices - first two rows of M
% - accumulate using MAX of the values in the third row - this step removes the duplicates
res = accumarray(M(1:2,:)', M(3,:)', [], @max);

% i/j indices of non-zero entries in the result matrix are
% the unique index pairs, and the value is the maximum third row
% value for all duplicates
[i, j, v] = find(res);

% construct the result matrix
[i j v]'


ans =

5 4 1 2 3
2 3 4 6 6
8 5 5 3 4

如果您的索引非常大并且您无法创建矩阵 res出于内存原因,您可以使用 accumarray 的稀疏版本函数 - 它创建一个稀疏矩阵,它只存储非零条目。其余保持不变:
res = accumarray(M(1:2,:)', M(3,:)', [], @max, 0, true);

关于matlab - 删除矩阵中第一个二维中的重复项,matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13718006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com