首页 > 解决方案 > 获取numpy数组的索引

问题描述

假设我有一个名字列表

names = ['Alex','Brad', 'Camilla']

如果我有一个像

norder = array([0, 1, 2, 1, 0, 1, 0, 2, 1, 1])

然后我可以通过做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')

而且names,我如何返回看起来像的东西norder

标签: python

解决方案


numpy 的一种选择是使用广播比较。

>>> (np.array(names) == order[:, None]).argmax(1)
array([0, 1, 2, 1, 0, 1, 0, 2, 1, 1])

虽然速度很快,但这里的缺点是它是内存密集型的。

另一种方法是使用 pandas IndexAPI:

>>> import pandas as pd
>>> idx = pd.Index(names)
>>> idx.get_indexer(order)
array([0, 1, 2, 1, 0, 1, 0, 2, 1, 1])

这应该是更有效的内存。


推荐阅读