如何在执行操作后从 numpy 数组中 "remove" 屏蔽?
How to "remove" mask from numpy array after performing operations?
我有一个 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
但是如何在对掩码数组应用给定操作后将掩码值更改回原始值和 "remove" 掩码?
之所以需要这样做是因为我要根据一组条件生成一个布尔数组,我需要修改数组中满足条件的元素。
我可以使用布尔索引对一维数组执行此操作,但对于二维数组我需要保留其原始形状,即。不是 return 只有满足条件的值的一维数组。
您已经拥有它:它叫做 array
!
这是因为虽然 masked
确保您只增加矩阵中的某些值,但实际上从未复制数据。因此,一旦您的代码执行,array
的元素在 condition
处递增,其余元素保持不变。
接受的答案没有回答问题。将掩码分配给 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
我有一个 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
但是如何在对掩码数组应用给定操作后将掩码值更改回原始值和 "remove" 掩码?
之所以需要这样做是因为我要根据一组条件生成一个布尔数组,我需要修改数组中满足条件的元素。
我可以使用布尔索引对一维数组执行此操作,但对于二维数组我需要保留其原始形状,即。不是 return 只有满足条件的值的一维数组。
您已经拥有它:它叫做 array
!
这是因为虽然 masked
确保您只增加矩阵中的某些值,但实际上从未复制数据。因此,一旦您的代码执行,array
的元素在 condition
处递增,其余元素保持不变。
接受的答案没有回答问题。将掩码分配给 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