所以例如我有一个数组,我想按列升序排序,使用'sorting()','np.arrange()'或'np.argsort很容易对整数进行排序()”
但是,如果我的列由浮动组成,该怎么办?
编辑: 我的意思是,我有类似的东西:
a = array([[1.7, 2, 3],
[4.5, 5, 6],
[0.1, 0, 1]])
我希望得到这个:
array([[0.1, 0, 1],
[1.7, 2, 3],
[4.5, 5, 6]])
到目前为止argsort()
我收到以下错误:
Type Error: only integer scalar arrays can be converted to a scalar index
答案 0 :(得分:2)
无论序列中包含什么,您都可以使用标准Python sorted
(或sort
进行就地排序)。只需使用自定义key
或自定义比较功能(cmp
)即可。例如,要按第4列升序列出列表(2-d数组):
>>> a=[[1.0,2.0,3.0,4.0], [4.0,3.0,2.0,1.0], [0,0,0,0]]
>>> from operator import itemgetter
>>>> sorted(a, key=itemgetter(3))
[[0, 0, 0, 0], [4.0, 3.0, 2.0, 1.0], [1.0, 2.0, 3.0, 4.0]]
答案 1 :(得分:1)
在numpy
中执行此操作的标准方法是指定要排序的正确axis
,默认情况下会对axis=-1
进行排序:
>>> np.sort(a, axis=0)
array([[ 0.1, 0. , 1. ],
[ 1.7, 2. , 3. ],
[ 4.5, 5. , 6. ]])
或就地:
>>> a.sort(axis=0)
>>> a
array([[ 0.1, 0. , 1. ],
[ 1.7, 2. , 3. ],
[ 4.5, 5. , 6. ]])
要对特定列中的 进行排序,您可以使用argsort()
,例如专栏0
:
>>> a[np.argsort(a[:,0])]
array([[ 0.1, 0. , 1. ],
[ 1.7, 2. , 3. ],
[ 4.5, 5. , 6. ]])