【问题标题】:Ranking vector entries by magnitude in MATLAB using vector operations使用向量运算在 MATLAB 中按大小对向量条目进行排名
【发布时间】:2012-05-28 16:42:30
【问题描述】:

我试图找到简短、高效的向量操作,这些操作可以通过它们的相对大小有效地对向量中的条目进行排名。例如,如果一个向量是:

A = [212 314 196];

我想要一个返回的函数:

B = [2 3 1];

我在搞乱排序功能,但到目前为止,我所有的解决方案都有我认为可能不必要的 for 循环。我很难过——有人知道更优雅的方式吗?

【问题讨论】:

标签: arrays matlab sorting vector ranking


【解决方案1】:

Loren 在inverting the sort order 上有一篇不错的博客文章。

【讨论】:

    【解决方案2】:

    [~,B]=sort(A) 当 A 是行向量时。

    [~,B]=sort(A,2) 当 A 是一个矩阵并且您想要每一行的相对大小时。

    http://www.mathworks.com/help/matlab/ref/sort.html

    【讨论】:

      【解决方案3】:

      假设向量A中的所有数字都不相同,可以通过A的转置求出它们的排序:

      sum(A > A.') + 1
      

      对于您的向量,这会导致:

      [2 3 1]

      【讨论】:

        猜你喜欢
        • 2016-07-09
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-04
        • 1970-01-01
        相关资源
        最近更新 更多