我试图使用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]
答案 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)