假设我有一个名字列表

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

如果我有一个像这样的numpy数组

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的内容?

最佳答案

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

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


虽然速度很快,但缺点是占用大量内存。

一种替代方法是使用pandas Index API:

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


这应该提高内存效率。

关于python - 获取numpy数组的索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52573615/

10-12 21:46