【发布时间】:2022-01-12 21:38:12
【问题描述】:
我有一个名为 new_arr 的 4 维数组。给定一个索引列表,我想根据我存储的旧数组 old_arr 更新 new_arr。我正在使用 for 循环来执行此操作,但效率低下。我的代码如下所示:
update_indices = [(2,33,1,8), (4,9,49,50), ...] #as an example
for index in update_indices:
i,j,k,l = index
new_arr[i][j][k][l] = old_arr[i][j][k][l]
这需要很长时间,因为 update_indices 很大。有没有一种方法可以一次更新所有条款或更有效地更新?
【问题讨论】:
-
你的数组是什么形状的?
-
它是 (57, 57, 57, 57)
-
唯一明显的就是直接使用
index元组。在简短的测试中,[index]与[index[0]][index[1]]相比,我得到了约 2 倍的加速。 -
new_arr[index] = old_arr[index] -
为了使上述 cmets 中提出的索引更快,您需要
update_indices是一个 Numpy 数组,而不是一个纯 Python 元组列表。这意味着它应该直接生成为 Numpy 数组(因为转换也很昂贵)。
标签: python numpy numpy-ndarray