我有一个指数数组,比如a = [2, 4, 1, 0, 3],我想把它转换成np.argsort(a) = [3, 2, 0, 4, 1].

b = np.zeros(a.size)
for i in range(a.size):
    b[a[i]] = i

第二个问题是Python中的周期很慢,我希望可以使用一些NumPy技巧来实现这一目标.

推荐答案

你有0到len(a)-1的所有数字吗?

然后使用智能索引:

a = [2, 4, 1, 0, 3]

b = np.empty(len(a), dtype=int) # or b = np.empty_like(a)
b[a] = np.arange(len(a))
b

yields :array([3, 2, 0, 4, 1])

Python相关问答推荐

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

PywinAuto在Windows 11上引发了Memory错误,但在Windows 10上未引发

如何避免Chained when/then分配中的Mypy不兼容类型警告?

运行总计基于多列pandas的分组和总和

有症状地 destruct 了Python中的regex?

pandas滚动和窗口中有效观察的最大数量

图像 pyramid .难以创建所需的合成图像

管道冻结和管道卸载

字符串合并语法在哪里记录

如何更新pandas DataFrame上列标题的de值?

OpenCV轮廓.很难找到给定图像的所需轮廓

在Python中从嵌套的for循环中获取插值

语法错误:文档. evaluate:表达式不是合法表达式

使用SeleniumBase保存和加载Cookie时出现问题

如何重新组织我的Pandas DataFrame,使列名成为列值?

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

随机森林n_估计器的计算

如何在Python中实现高效地支持字典和堆操作的缓存?

函数()参数';代码';必须是代码而不是字符串

按最大属性值Django对对象进行排序