我有一个 3D 图像扫描(形状:335x306x306
,总元素:31368060
),我想用相同大小的 3D bool 掩码来掩盖它以返回相同大小的蒙版图像。
当我简单地用掩码索引数组时:
masked_image = image_pix[mask]
我得到图像像素值的一维数组,其中掩码 = 1 按标准行主(C 样式)顺序排序(如 here 所解释)。由于掩码,它只有 6953600 个元素。
如果我没有索引,如何将这个 1D 数组重新整形回 3D 数组?我意识到我可以使用掩码本身的索引来用掩码值迭代地填充 3D 数组,但我希望有一个更优雅(且计算效率更高)的解决方案,不依赖于 for 循环。
最佳答案
marr = np.ma.array(image_pix, mask=mask)
使用[mask]
的“正常”索引会删除所有屏蔽值,因此无法保证它可以再次重新整形为3D(因为它丢失了项目),所以这是不可能的。
但是MaskedArray
保持其形状:
>>> import numpy as np
>>> arr = np.random.randint(0, 10, 16).reshape(4, 4)
>>> marr = np.ma.array(arr, mask=arr>6)
>>> marr.shape
(4, 4)
>>> marr
masked_array(data =
[[3 -- 0 1]
[4 -- 6 --]
[2 -- 6 0]
[4 5 0 0]],
mask =
[[False True False False]
[False True False True]
[False True False False]
[False False False False]],
fill_value = 999999)
关于Python:用 3D bool 索引 3D 数组并返回相同大小的 3D 数组......优雅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41947604/