嗨,我想用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])]

10-06 14:44