我一直在阅读masked数组的文档,我很困惑——MaskedArray与维护一个值数组和一个boolean掩码有什么不同?有人能给我举个例子吗?在哪里,maskedarray更方便,或者性能更高?在
更新6/5
为了更具体地回答我的问题,下面是一个使用MaskedArray的经典例子:
>>>data = np.arange(12).reshape(3, 4)
>>>mask = np.array([[0., 0., 1., 0.],
[0., 0., 0., 1.],
[0., 1., 0., 0.]])
>>>masked = np.ma.array(data, mask=mask)
>>>masked
masked_array(
data=[[0, 1, --, 3],
[4, 5, 6, --],
[8, --, 10, 11]],
mask=[[False, False, True, False],
[False, False, False, True],
[False, True, False, False]],
fill_value=999999)
>>>masked.sum(axis=0)
masked_array(data=[12, 6, 16, 14], mask=[False, False, False, False], fill_value=999999)
我也可以这样做:
^{pr2}$我想MaskedArray版本看起来更好一些,如果需要可重用的数组,可以避免复制。从标准的ndarray转换为MaskedArray时,它不使用同样多的内存吗?在对数据应用掩码时,它是否避免了引擎盖下的副本?还有其他优势吗?在
官方的答案是here:
事实上,与类似的nan阵列相比,屏蔽阵列可能相当慢:
它们什么时候有用?在
在多年的编程中,我发现它们在以下场合很有用:
np.nan
来表示缺失值,但我也屏蔽了信噪比较差的值,这样我就可以同时识别这两个值。在通常,可以将遮罩数组视为更紧凑的表示形式。最好的方法是逐个测试更容易理解和有效的解决方案。在
相关问题 更多 >
编程相关推荐