【问题标题】:numpy argsort yields TypeError: only integer scalar arrays can be converted to a scalar indexnumpy argsort 产生类型错误:只有整数标量数组可以转换为标量索引
【发布时间】:2020-05-05 18:11:28
【问题描述】:
import numpy as np
a = [3.1,5.1,34.2,1.5,2.4,6.4]
b = [234,5,5,465,873,345]
idx = np.argsort(a)
a = a[idx]
b = b[idx]

我正在使用 Python 3.6。

从 numpy argsort 我得到一个整数数组,我想用这个重新排列我的数组,但我得到了错误:

TypeError: 只有整数标量数组可以转换为标量索引

谁能帮忙?

【问题讨论】:

    标签: python-3.6


    【解决方案1】:

    a 和 b 必须是 numpy 数组才能像这样排序。

    import numpy as np
    a = np.array([3.1,5.1,34.2,1.5,2.4,6.4])
    b = np.array([234,5,5,465,873,345])
    idx = np.argsort(a)
    a = a[idx]
    b = b[idx]
    

    【讨论】:

      【解决方案2】:
      import numpy as np
      
      a = [3.1,5.1,34.2,1.5,2.4,6.4]
      b = [234,5,5,465,873,345]
      inds = np.argsort(a)
      a = [a[idx] for idx in inds]
      b = [b[idx] for idx in inds]
      

      你也可以这样做。

      【讨论】:

        【解决方案3】:

        您的问题到底是什么?您只想对数组进行排序吗?

        如果是这样,那么它应该很简单:

        a = [3.1,5.1,34.2,1.5,2.4,6.4]
        b = [234,5,5,465,873,345]
        a = np.argsort(a)
        b = np.argsort(b)
        

        如果问题是其他问题,请告诉我。

        【讨论】:

        • 我想用 np.argsort(a) 会得到与列表 a 的排序顺序相对应的索引列表,然后我想根据列表 a 的重新排列来重新排列列表 a 和 b。我希望得到这个:a[idx] = [1.5, 2.4, 3.1, 5.1, 6.4, 34.2] 和 b[idx] = [465, 873, 234, 5, 345, 5]
        • np.argsort 返回对数组进行排序的索引 - link to documentation
        猜你喜欢
        • 2019-11-07
        • 1970-01-01
        • 2021-07-15
        • 1970-01-01
        • 2021-10-31
        • 2018-05-29
        • 2018-04-04
        • 2021-07-21
        • 1970-01-01
        相关资源
        最近更新 更多