我有一个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'大小的矩阵中!有没有人有任何想法我怎么能这样做?
答案 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{:});