假设我有一个名字列表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/