繁体   English   中英

如何有效地修改具有数百万个单元的Numpy 3D数组

[英]How to efficiently modify a numpy 3D array with millions of cells

我有一个3D数组,其中包含数以百万计的单元格,其值基本上是标签。 我有另一个大小相同的3D数组,我需要向其插入不同的值,具体取决于标签数组上相应坐标的标签。

我想知道是否有更好的方法可以将值插入到具有如此多元素的3D数组中,而不是3维嵌套循环(大约需要300秒才能生成)。

举一个更具体的例子,我有labelMatrix ,其大小为512x512x200,并且标签簇的范围为1-100,000。 我也有一个列表labelMeanList ,其中有100,000个与标签数量相对应的元素。 每个此类元素均具有有关应传给3D标签矩阵中每个体素的平均值的信息,相应于其标签值。 有一个大小为512x512x200的新meanMatrix ,我将在其中相应地插入平均值。 现在,这就是我的实现方式:

for x, y, z in itertools.product(range(xDim), range(yDim), range(zDim)):
   currentLabel = labelMatrix[x,y,z]
   meanMatrix[x, y, z] = labelMeanList[currentLabel].mean

现在,正如我所说,这需要很长时间才能运行。 谁能想到一种更好的方法来实现这一目标?

我不知道labelMeanListmean属性是什么东西,但是使用均值数组会更好。 (此外,3维数组实际上不是矩阵。)

带有平均值数组:

means = numpy.array([x.mean for x in labelMeanList])

你可以做

meanMatrix = means[labelMatrix]

应用高级索引来选择C级循环中的所有值,避免了字节码解释的开销和包装器对象的创建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM