【发布时间】:2021-11-27 18:08:30
【问题描述】:
我希望加快下面的代码,该代码循环遍历 brain 中已拆分为区域(编号为 0 到 50)的每个体素,并使用相应的值重新分配该区域(在数组 @987654322 中找到) @ 其中包含 51 个数字)。 brain 是一个 numpy.ndarray。由于大脑阵列的尺寸为 182x218x182,因此完成此循环大约需要 12 秒。
import numpy as np
# Sample data
brain = np.random.randint(10, size=(6,5,5))
region_vals = np.random.randint(250, size=11)
# Iterate through each voxel in the brain
for x in range(0, brain.shape[0]):
for y in range(0, brain.shape[1]):
for z in range(0, brain.shape[2]):
region = brain[x][y][z] # Get region number
# Reassign voxel value
brain[x][y][z] = region_vals[region]
这里不能选择多线程,因为我已经在并行运行此代码。
有没有办法加快循环或完全消除循环?
【问题讨论】:
-
@BobtheMagicMoose 是的,你是对的。移除这些部件将运行时间从 12 秒减少到 0.1 秒。
-
抱歉,我删除了我的评论 - 我会放回去:我敢打赌,中间的关键部分是瓶颈,而不是循环开销。
-
Numpy 数组适用于批量操作,not 迭代和索引。理想情况下,使用本机 numpy 操作。但是,如果不知道
region_vals[region]实际在做什么,我们就不能真正说出如何做到最好。 -
@MisterMiyagi
region_vals是一个包含 51 个浮点值的数组,而region是一个整数。region_vals[region]只是找到该区域的值。 -
@tdelaney 我提供了一些示例数据。
标签: python numpy multidimensional-array indexing