gpt4 book ai didi

python - 执行操作后如何从 numpy 数组中屏蔽 "remove"?

转载 作者:太空狗 更新时间:2023-10-30 01:54:16 24 4
gpt4 key购买 nike

我有一个 2D numpy 数组,我需要根据条件对其进行屏蔽,以便我可以对屏蔽数组应用操作,然后将屏蔽值恢复为原始值。

例如:

import numpy as np

array = np.random.random((3,3))
condition = np.random.randint(0, 2, (3,3))
masked = np.ma.array(array, mask=condition)

masked += 2.0

但是,在对掩码数组应用给定操作后,如何将掩码值改回原始值并“移除”掩码?

我需要这样做的原因是我正在根据一组条件生成一个 bool 数组,我需要修改满足条件的数组元素。

我可以使用 bool 索引对一维数组执行此操作,但对于二维数组我需要保留其原始形状,即。不返回仅包含满足条件的值的一维数组。

最佳答案

接受的答案没有回答问题。将掩码分配给 False 在实践中有效,但许多算法不支持掩码数组(例如 scipy.linalg.lstsq() )并且此方法无法摆脱它。所以你会遇到这样的错误:

ValueError: masked arrays are not supported

真正摆脱掩码的唯一方法是仅将变量分配给掩码数组的数据。

import numpy as np

array = np.random.random((3,3))
condition = np.random.randint(0, 2, (3,3))
masked = np.ma.array(array, mask=condition)

masked += 2.0

masked.mask = False
hasattr(masked, 'mask')
>> True

使用 MaskedArray 数据属性将变量分配给数据:

masked = masked.data 
hasattr(masked, 'mask')
>> False

关于python - 执行操作后如何从 numpy 数组中屏蔽 "remove"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27791559/

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