【发布时间】:2021-03-28 11:30:33
【问题描述】:
我有一个三维(a,b,c)的数组,我需要修改二维(a,b)数组索引的位置c。
我编写了一个按预期工作的代码,但有谁知道是否有办法在不使用 for 循环的情况下解决这个问题?
import numpy as np
arr = np.random.randn(100, 5, 2)
mod = np.random.randn(100, 5)
ids = np.random.randint(0, 2, size=[100,5])
for i in range(100):
for j in range(5):
arr[i,j,ids[i,j]] = mod[i,j]
【问题讨论】:
-
嗨。我不明白
ids = np.random.randint(0, 2, size=[100,5])是如何帮助你的。它会生成一个随机填充 0 和 1 的二维数组,然后您可以使用它来定义分配给哪个切片mod[i, j]。所以简而言之,当您在最后一行分配mod[i, j]时,您将其随机分配给指向[i,j,0]或[i,j,1]您是故意这样做的吗?如果是这样,我不明白您要做什么,所以我的答案可能不是您要找的。如果这不是错误,您能否编辑您的答案以澄清您的问题?谢谢。 -
嗨。感谢您的关注。该代码只是我的问题的简化。我将 arr、mod 和 ids 定义为随机的,以便能够作为示例运行。简短的故事是我在机器学习中使用进化算法,我的代码需要很长时间才能完成,因为代数太大了。然后,我试图通过消除循环来优化它。在这种情况下,我需要根据 id 更改 arr 将 mod 放入位置。如果我得到这个,我将消除我的代码中的许多循环。我现在正在阅读您答案中的链接。
标签: arrays python-3.x numpy multidimensional-array