python - 获取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
?
解决方案
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])
这应该是更有效的内存。
推荐阅读
- reactjs - dexu中的一次性动作
- javascript - 如何在 Vue 测试文件中使用嵌套数据属性和挂载方法
- wordpress - WordPress 顶级菜单项的不同菜单
- java - 带有 Eclipese IDE 的 Selenium Webdriver - 元素应该是“选择”但是“跨度”
- r - 与 ggplot2 具有相同变量的累积堆积条形图
- kubernetes - Kubernetes 部署中的气流日志
- vim - gvim 复制一个字符串,并希望以块样式粘贴到多行
- javascript - 为什么这些缓冲区段的字节计数器显示为 8TB?
- sql-server-data-tools - 使用核心/模型数据库,在不同的安装上进行小改动,无需重复代码即可进行定制
- python - AttributeError:类型对象“StandardSqlDataType”没有属性“STRING”