【问题标题】:Row and Column Indices fo the n largest elements in a matrix矩阵中 n 个最大元素的行和列索引
【发布时间】:2013-04-16 15:47:36
【问题描述】:

我有一个与这里解决的问题非常相似的问题:

Get the indices of the n largest elements in a matrix

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

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

    如果您采用该问题中的解决方案来找到 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);
    

    根据 cmets 的替代方案:

    [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
    

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

    【讨论】:

    • 与 [row col] = ind2sub(size(A), idx);请注意,尽管给出的行和列确实与最大的五个元素有关,但它们没有按顺序给出,这有点令人困惑?这可以解决吗?例如 idx=159 910 1005 2188 2913 row=3 4 3 4 3 col=27 152 168 365 486 最大值在第 486 列,所以#s 正确,但第二个最大值在 168?
    • 所以虽然 168 列在 col[] 中,但它位于第三位,即使它代表原始矩阵的第二大元素?
    • 感谢您接收输出错误,我已在答案中修复了该错误。此外,确实结果是无序的。另一个问题中的方法返回了一个没有排序的逻辑索引。我并没有真正关注那部分,因为我专注于将索引转换回引用矩阵。我在我的答案中添加了另一种方法,但都是一样的:按照你想要的顺序获取你想要的元素的索引,然后将它们扔到ind2sub
    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 2019-08-31
    • 2021-09-14
    • 2015-06-24
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多