嗨,我想使用lexsort订购numpy.array.
import numpy as np
surnames = ['Hertz', 'Galilei', 'Hertz']
names = ['Heinrich', 'Galilao', 'Gustav']
ind = np.lexsort((names,surnames))
但是如何根据此索引排序一个数组?
我会做
surnames2 = surnames.copy()
for i, a in enumerate(ind):
surnames2[i] = surnames[a]
但是我认为应该有另一种方式,而不自己写周期.
谢谢
解决方法:
如果将姓转换为numpy数组,则可以使用lexsort返回的整数数组对其进行索引:
sorted_surnames = np.array(surnames)[ind]
如果要坚持使用简单的Python列表,则可以执行以下操作:
sorted_surnames = [n for (i, n) in sorted(zip(ind, surnames), key=lambda x: x[0])]