使用非整数列

时间:2017-07-02 13:38:32

标签: python sorting

所以例如我有一个数组,我想按列升序排序,使用'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

2 个答案:

答案 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. ]])