gpt4 book ai didi

Python:用 3D bool 索引 3D 数组并返回相同大小的 3D 数组......优雅

转载 作者:行者123 更新时间:2023-12-01 03:20:44 27 4
gpt4 key购买 nike

我有一个 3D 图像扫描(形状:335x306x306,总元素:31368060),我想用相同大小的 3D bool 掩码来掩盖它以返回相同大小的蒙版图像。

当我简单地用掩码索引数组时:

masked_image = image_pix[mask]

我得到图像像素值的一维数组,其中掩码 = 1 按标准行主(C 样式)顺序排序(如 here 所解释)。由于掩码,它只有 6953600 个元素。

如果我没有索引,如何将这个 1D 数组重新整形回 3D 数组?我意识到我可以使用掩码本身的索引来用掩码值迭代地填充 3D 数组,但我希望有一个更优雅(且计算效率更高)的解决方案,不依赖于 for 循环。

最佳答案

使用np.ma.MaskedArray :

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com