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]
全部
具有合理的大型 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]