use*_*912 4 python numpy python-2.7
我尝试对数组进行排序:
import numpy as np
arr = [5,3,7,2,6,34,46,344,545,32,5,22]
print "unsorted"
print arr
np.argsort(arr)
print "sorted"
print arr
Run Code Online (Sandbox Code Playgroud)
但输出是:
unsorted
[5, 3, 7, 2, 6, 34, 46, 344, 545, 32, 5, 22]
sorted
[5, 3, 7, 2, 6, 34, 46, 344, 545, 32, 5, 22]
Run Code Online (Sandbox Code Playgroud)
阵列根本不会改变
Ter*_*ryA 19
np.argsort 如果没有对列表进行排序,它会返回一个列表,其中包含您可以用来对列表进行排序的指示.
您必须将此返回的列表分配给值:
new_arr = np.argsort(arr)
Run Code Online (Sandbox Code Playgroud)
然后,要使用这些索引对列表进行排序,您可以执行以下操作:
np.array(arr)[new_arr]
Run Code Online (Sandbox Code Playgroud)
尝试
order = np.argsort(arr)
print np.array(arr)[order]
Run Code Online (Sandbox Code Playgroud)
所述argsort响应是元素的索引.
这里有两个问题; 一个是np.argsort返回一个索引数组,它会对原始数组进行排序,第二个是它不会修改原始数组,只是给你另一个.这个互动会议应该有助于解释:
In [59]: arr = [5,3,7,2,6,34,46,344,545,32,5,22]
In [60]: np.argsort(arr)
Out[60]: array([ 3, 1, 0, 10, 4, 2, 11, 9, 5, 6, 7, 8])
Run Code Online (Sandbox Code Playgroud)
在上面,[3, 1, 0, ...]意味着3原始列表中的项应该首先(the 2),然后项2应该来(the 3),然后是第一个(index是0,item是5),依此类推.请注意,arr仍然不受影响:
In [61]: arr
Out[61]: [5, 3, 7, 2, 6, 34, 46, 344, 545, 32, 5, 22]
Run Code Online (Sandbox Code Playgroud)
您可能不需要这个索引数组,并且会发现它更容易使用np.sort:
In [62]: np.sort(arr)
Out[62]: array([ 2, 3, 5, 5, 6, 7, 22, 32, 34, 46, 344, 545])
Run Code Online (Sandbox Code Playgroud)
但这仍然是arr孤立的:
In [68]: arr
Out[68]: [5, 3, 7, 2, 6, 34, 46, 344, 545, 32, 5, 22]
Run Code Online (Sandbox Code Playgroud)
如果您想要就地(修改原件),请使用:
In [69]: arr.sort()
In [70]: arr
Out[70]: [2, 3, 5, 5, 6, 7, 22, 32, 34, 46, 344, 545]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22088 次 |
| 最近记录: |