【问题标题】:Replicate scipy rankdata in matlab在matlab中复制scipy rankdata
【发布时间】:2019-09-10 13:43:31
【问题描述】:

对于如何在 MATLAB 中检索已排序数组的新索引,我想不出一个干净的解决方案。 Scipy(在 Python 中)有我需要的 rankdata,而 MATLAB 的 sort 提供索引。

例如[0 -3 -1 1]数组升序排序后为[-3 -1 0 1]

我想检索新索引,即[3 1 2 4],而 MATLAB 没有提供内置解决方案..

【问题讨论】:

    标签: arrays matlab sorting


    【解决方案1】:

    你可以使用:

    x       = [0 -3 -1 1];
    [~,ind] = sort(x);
    ind     = ind(ind)
    

    【讨论】:

      【解决方案2】:

      unique 恰好也按升序排序,并提供双向索引。

      A = [0 -3 -1 1];
      [B,I,C] = unique(A);
      B =
          -3    -1     0     1
      C =
           3
           1
           2
           4
      

      请注意,如果 A 包含重复项(与您的示例不同),此方法将失败:

      A = [0 -3 -1 1 1];
      [B,I,C] = unique(A);
      B =
          -3    -1     0     1
      C =
           3
           1
           2
           4
           4
      

      【讨论】:

      • 如果A不包含任何重复的最佳解决方案。
      • @obchardon 谢谢。我添加了关于重复的注释。 OP的示例没有,因此我使用了unique
      【解决方案3】:

      如果我正确地解释了您的要求,我认为这应该可行。

      x = [0 -3 -1 1];
      [s,r]=sort(x);
      [~,rank] = sort(r);
      

      我得到的输出是

      s = -3 -1 0 1
      rank = 3 1 2 4
      

      【讨论】:

        猜你喜欢
        • 2012-03-31
        • 2013-01-01
        • 2021-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-05
        • 2022-08-08
        • 2021-12-02
        相关资源
        最近更新 更多