我有一个与此处解决的问题非常相似的问题:
但是,此解决方案将矩阵转换为数组,然后根据新数组给出索引。
我想要最大(和最小)n 值的原始矩阵的行和列索引。
如果您采用该问题中的解决方案来找到 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
注意:上述方法不会消除任何重复值,因此例如,如果您有两个具有相同值的元素,它可能会返回两个元素,或者如果它们在边界上,则只返回两个元素之一。