使用numpy.ma从单元素掩码数组列表创建一维掩码数组遇MaskError问题咨询
numpy.ma从0维掩码数组列表创建一维数组的问题解析
错误原因
当你把带掩码的0维MaskedArray放进列表传给ma.MaskedArray()时,构造函数会尝试把列表里的每个元素转成普通Python数值。但被掩码的元素属于numpy.ma的特殊状态,本质是"缺失值",没有有效数值可转换为Python int类型,所以直接触发MaskError。
而未掩码的元素能正常工作,是因为它们的data属性是有效数值,构造函数可以直接提取这个值来构建新数组。
解决方法
有两种可行的处理方式:
方式1:用ma.concatenate直接拼接(推荐)
numpy.ma提供的拼接函数会自动处理每个0维数组的数据和掩码,不需要手动提取:
import numpy.ma as ma # 构造带掩码的0维数组列表 masked_list = [ma.masked_array(data=-99, mask=True), ma.masked_array(data=-99, mask=True)] # 拼接为一维掩码数组 one_d_ma = ma.concatenate(masked_list)
方式2:手动提取数据和掩码构造
如果一定要用ma.MaskedArray()构造,可以分别收集所有元素的数据和掩码数组,再传入构造函数:
import numpy as np import numpy.ma as ma masked_list = [ma.masked_array(data=-99, mask=True), ma.masked_array(data=-99, mask=True)] # 提取所有元素的数据 data_arr = np.array([item.data for item in masked_list]) # 提取所有元素的掩码 mask_arr = np.array([item.mask for item in masked_list]) # 构造一维掩码数组 one_d_ma = ma.MaskedArray(data_arr, mask=mask_arr)
内容的提问来源于stack exchange,提问作者sebschub
相关产品推荐
相关产品推荐

