如何在使用numpy分区排序后获取数组中浮点数的索引

时间:2017-05-17 09:35:32

标签: python sorting numpy

我试图使用np.partition对数组列表进行排序,但它错误地对列表进行排序。我认为原因是列表中的浮点数。如何使用np.partition对包含浮点数的数组列表进行排序并获取元素的索引?

x = np.array([0.056669, 0.019477, 0.06245, 0., 0.019524, 0.058592, 0.05847, 0.078317, 0.09599])
print(np.partition(x, 1)[0:9])

结果在这里:

[ 0.        0.019477  0.06245   0.056669  0.019524  0.058592  0.05847
  0.078317  0.09599 ]

所需的输出在这里:

[3 1 4 0 6 5 2 7 8]

1 个答案:

答案 0 :(得分:1)

np.partition只是“分区”你的元素,它不会做完整的排序。这是为了“获得最低/最高k元素”的操作。来自文档:

  

numpy.partition(a,kth,axis = -1,kind ='introselect',order = None)

     

返回数组的分区副本。

     

创建数组的副本,其元素重新排列,使得第k个位置的元素值位于排序数组中的位置。小于第k个元素的所有元素在该元素之前移动,并且所有等于或大于它的元素都在其后面移动。 两个分区中元素的排序未定义。

如果您想要sort完整数组,则应使用np.sort

有几个numpy函数可以为您提供索引而不是值,这些函数通常以arg*开头,例如np.argsort

>>> import numpy as np
>>> arr = np.array([0.056669, 0.019477, 0.06245, 0., 0.019524, 0.058592, 0.05847, 0.078317, 0.09599])

>>> np.partition(arr, 1)
array([ 0.      ,  0.019477,  0.06245 ,  0.056669,  0.019524,  0.058592,
        0.05847 ,  0.078317,  0.09599 ])
>>> np.argpartition(arr, 1)
array([3, 1, 2, 0, 4, 5, 6, 7, 8], dtype=int64)
>>> np.partition(arr, 7)
array([ 0.      ,  0.019524,  0.019477,  0.056669,  0.058592,  0.05847 ,
        0.06245 ,  0.078317,  0.09599 ])
>>> np.argpartition(arr, 7)
array([3, 4, 1, 0, 5, 6, 2, 7, 8], dtype=int64)

>>> np.sort(arr)
array([ 0.      ,  0.019477,  0.019524,  0.056669,  0.05847 ,  0.058592,
        0.06245 ,  0.078317,  0.09599 ])
>>> np.argsort(arr)
array([3, 1, 4, 0, 6, 5, 2, 7, 8], dtype=int64)