将numpy数组排序为tab

2024-05-10 10:28:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子

[[0, 3], [5, 1], [2, 1], [4, 5]]

我用numpy.array制作了一个数组:

[[0 3]
 [5 1]
 [2 1]
 [4 5]]

我该怎么把它分类成一张桌子?特别是,我想按第二列升序排序,然后通过让第一列按升序排序来解析任何关系。因此我希望:

[[2 1]
 [5 1]
 [0 3]
 [4 5]]

任何帮助都将不胜感激!


Tags: numpy排序关系分类数组array单子桌子
3条回答

您可以使用numpy.lexsort()

>>> a = numpy.array([[0, 3], [5, 1], [2, 1], [4, 5]])
>>> a[numpy.lexsort(a.T)]
array([[2, 1],
       [5, 1],
       [0, 3],
       [4, 5]])

另一种方法是-分割出所需的数据位,使用argsort获取排序索引,然后使用该结果分割原始数组:

a = np.array([[0, 3], [5, 1], [2, 1], [4, 5]])

subarray = a[:,1] # 3,1,1,5

indices = np.argsort(subarray) # Returns array([1,2,0,3])

result = a[indices]

或者,一气呵成:

a[np.argsort(a[:,1])]

http://docs.scipy.org/doc/numpy/reference/generated/numpy.lexsort.html#numpy.lexsort

特别是在你的情况下

import numpy as np
x = np.array([[0,3],[5,1],[2,1],[4,5]])
x[np.lexsort((x[:,0],x[:,1]))]

输出

array([[2,1],[5,1],[0,3],[4,5]])

相关问题 更多 >