0

我有一个与此处解决的问题非常相似的问题:

获取矩阵中 n 个最大元素的索引

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

我想要最大(和最小)n 值的原始矩阵的行和列索引。

4

1 回答 1

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

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

于 2013-04-16T16:01:01.397 回答