pbr*_*ach 4 python arrays numpy
我有一个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
Run Code Online (Sandbox Code Playgroud)
但是,如何将屏蔽值更改回原始值并在将给定操作应用于屏蔽数组后"移除"屏蔽?
我需要这样做的原因是我基于一组条件生成一个布尔数组,我需要修改满足条件的数组元素.
我可以使用布尔索引来实现1D数组,但是对于2D数组我需要保留其原始形状,即.不返回仅具有满足条件的值的1D数组.
接受的答案没有回答问题。False在实践中分配掩码是scipy.linalg.lstsq()可行的,但许多算法不支持掩码数组(例如),并且这种方法没有摆脱它。所以你会遇到这样的错误:
ValueError: masked arrays are not supported
Run Code Online (Sandbox Code Playgroud)
真正摆脱掩码的唯一方法是仅将变量分配给掩码数组的数据。
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
Run Code Online (Sandbox Code Playgroud)
使用 MaskedArray 数据属性将变量分配给数据:
masked = masked.data
hasattr(masked, 'mask')
>> False
Run Code Online (Sandbox Code Playgroud)
你已经拥有它:它被称为array!
这是因为虽然masked确保只增加矩阵中的某些值,但实际上不会复制数据.因此,一旦代码执行,array元素就会condition递增,其余元素保持不变.
| 归档时间: |
|
| 查看次数: |
5409 次 |
| 最近记录: |