计算矩阵某些部分中重复元素的最大值

时间:2018-01-18 02:01:08

标签: matlab unique

我有一个2000x2矩阵,“对于这个矩阵的每个10x2段”,我需要计算矩阵中重复值(第一列)的相应值(第二列)的最大值。就像矩阵的第3个10x2段是这样的:

...
[2 20;
2 30;
2 40;
7 100;
7 110;
7 120;
7 130;
7 140;
15 240;
15 260]
 ...

我想得到这个:

...
[2 40;
7 140;
15 260]
 ...

等等。我写了以下内容,但它通过“整个矩阵”给出了最多的重复元素:

[uv,~,idx] = unique(A(:,1));
B = [uv accumarray(idx,A(:,2),[],@max)];

但同样,我需要为矩阵的每个单独的10x2段“”执行,然后将结果存储在'无论x 2'大小的矩阵中!有没有人有任何想法我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

您可以使用值的索引并使用它们来提取函数句柄中的元素,而不是使用A(:,2)作为accumarray的参数。

A = randi(5,50,2);
val = (1:size(A,1)).';
B = accumarray( ...
    [A(:,1) ceil(val/10)], val, [], ...
    @(x){[ A(x(1), 1) max(A(x, 2)) ]} ...
);
result = vertcat(B{:});