使用lexsort:
import numpy as np
a = np.array([(3, 2), (6, 2), (3, 6), (3, 4), (5, 3)])
ind = np.lexsort((a[:,1],a[:,0]))
a[ind]
# array([[3, 2],
# [3, 4],
# [3, 6],
# [5, 3],
# [6, 2]])
a.ravel()
如果a
为,则返回一个视图C_CONTIGUOUS
。如果是这样的话,@ars的方法(通过使用ravel
代替稍作修改)将flatten
产生一种很好a
的就地 排序方法:
a = np.array([(3, 2), (6, 2), (3, 6), (3, 4), (5, 3)])
dt = [('col1', a.dtype),('col2', a.dtype)]
assert a.flags['C_CONTIGUOUS']
b = a.ravel().view(dt)
b.sort(order=['col1','col2'])
由于b
是一个视图a
,排序b
排序a
,以及:
print(a)
# [[3 2]
# [3 4]
# [3 6]
# [5 3]
# [6 2]]