更新时间:2022-05-04 23:30:05
使用 词法排序:
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
是 C_CONTIGUOUS
,
a.ravel()
返回一个视图.如果这是真的,@ars 的方法,通过使用 ravel
而不是 flatten
稍作修改, 产生一种很好的方式来排序 a
in-place:
a.ravel()
returns a view if a
is C_CONTIGUOUS
. If that is true,
@ars's method, slightly modifed by using ravel
instead of flatten
, yields a nice way to sort a
in-place:
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
排序:
Since b
is a view of a
, sorting b
sorts a
as well:
print(a)
# [[3 2]
# [3 4]
# [3 6]
# [5 3]
# [6 2]]