使用Python bool与numpy.bool_构造numpy掩码数组为何结果不同?
为什么numpy.ma.masked_array传入Python bool和numpy.bool_会得到不同mask结果?
先看两种调用方式的差异:
方式1:使用Python内置bool类型
import numpy as np data = np.ma.masked_array([1, 2], mask=False) data, data.mask
输出:
(masked_array(data=[1, 2], mask=[False, False], fill_value=999999), array([False, False]))
方式2:使用numpy.bool_类型
import numpy as np data = np.ma.masked_array([1, 2], mask=np.bool_(False)) data, data.mask
输出:
(masked_array(data=[1, 2],mask=False,fill_value=999999),False)
差异原因
numpy.ma模块对mask参数的处理逻辑,会根据传入值的类型做区分:
- 当传入Python原生bool标量(比如
False)时,numpy.ma会自动触发广播机制,将这个标量扩展成和输入数据形状完全一致的数组。所以长度为2的输入数据,会生成长度为2的全False掩码数组。 - 当传入numpy的bool_标量(
np.bool_(False))时,numpy.ma会直接将其视为一个整体的掩码状态,不会进行广播。此时整个数组的掩码状态是统一的标量值,意味着所有元素共享同一个掩码标记。
简单来说:Python标量会被适配数据形状,numpy标量会被当作全局掩码使用。
内容的提问来源于stack exchange,提问作者LeeHHH
相关产品推荐
相关产品推荐

