嗨,我想用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]
但我认为应该有另一种方法不用自己写循环。
谢谢
最佳答案
如果将surnames
转换为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])]