3d 网格的掩蔽和直方图

Masking and histogram of the 3d grid

全部

具有合理的大型 3d 网格作为 NumPy 浮点数组,形状为 (nx, ny, nz)。具有类似(相同形状)的 1 和 0 的 3d 网格,本质上是一个位掩码。我想 select 基于位掩码的网格数据,稍后将它们用于直方图。

我现在做的是

k = 0
for iz in range(0, nz):
    for iy in range(0, ny):
        for ix in range(0, nx):
            d = data[ix, iy, iz]
            b = bitmap[ix, iy, iz]
            if b > 0:
                droi[k] = d
                k += 1

hist, bins = np.histogram(droi, bins = 200, range=(0.0, dmax))

这是不优雅和缓慢的。我考虑过展平两个数组并将它们相乘,并在整个事物上使用 运行 直方图,但 0 也可能在数据中,因此它会改变直方图。

有没有想过如何用更小的代码更快地完成它?

如果将bitmap转换为布尔数组,则可以使用boolean array indexing得到data的元素对应bitmap中的True个元素=]:

bitmapbool = numpy.array(bitmap, dtype=bool)
droi = data[bitmapbool]