假设我有一张名单
names = ['Alex','Brad', 'Camilla']
如果我有一个像
norder = array([0, 1, 2, 1, 0, 1, 0, 2, 1, 1])
那我可以用 norder 访问 names
norder
names
names[norder] >>> array(['Alex', 'Brad', 'Camilla', 'Brad', 'Alex', 'Brad', 'Alex', 'Camilla', 'Brad', 'Brad'], dtype='<U7')
我该怎么倒过来?鉴于
order= array(['Alex', 'Brad', 'Camilla', 'Brad', 'Alex', 'Brad', 'Alex', 'Camilla', 'Brad', 'Brad'], dtype='<U7')
和 姓名 ,如何返回看起来像 ?
姓名
numpy的一个选项是使用广播比较。
>>> (np.array(names) == order[:, None]).argmax(1) array([0, 1, 2, 1, 0, 1, 0, 2, 1, 1])
虽然速度很快,但缺点是它占用大量内存。
另一种选择是使用熊猫 Index 应用程序编程接口:
Index
>>> import pandas as pd >>> idx = pd.Index(names) >>> idx.get_indexer(order) array([0, 1, 2, 1, 0, 1, 0, 2, 1, 1])
这应该更节省内存。