矩阵中n个最大元素的行和列索引

时间:2013-04-16 15:47:36

标签: matlab

我遇到的问题与此处解决的问题非常相似:

Get the indices of the n largest elements in a matrix

然而,此解决方案将矩阵转换为数组,然后根据新数组给出索引。

我希望原始矩阵的行和列索引为最大(和最小)n值。

1 个答案:

答案 0 :(得分:3)

如果您在该问题中采用解决方案来找到5个最大的唯一值

sortedValues = unique(A(:));          %# Unique sorted values
maxValues = sortedValues(end-4:end);  %# Get the 5 largest values
maxIndex = ismember(A,maxValues);     %# Get a logical index of all values
                                      %#   equal to the 5 largest values

为您提供匹配的值的逻辑矩阵。您可以使用find获取索引,然后使用ind2sub将这些索引转换回坐标。

idx = find(maxIndex);
[x y] = ind2sub(size(A), idx);

另一种选择,根据评论:

[foo idx] = sort(A(:), 'descend'); %convert the matrix to a vector and sort it
[x y] = ind2sub(size(A), idx(1:5)); %take the top five values and find the coords

注意:上述方法不会消除任何重复值,因此例如,如果您有两个具有相同值的元素,则它可能返回两个元素,或者如果它们位于边界上,则只返回两个元素中的一个。