我遇到的问题与此处解决的问题非常相似:
Get the indices of the n largest elements in a matrix
然而,此解决方案将矩阵转换为数组,然后根据新数组给出索引。
我希望原始矩阵的行和列索引为最大(和最小)n值。
答案 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
注意:上述方法不会消除任何重复值,因此例如,如果您有两个具有相同值的元素,则它可能返回两个元素,或者如果它们位于边界上,则只返回两个元素中的一个。