我一直在阅读MaskedArray文档,但我很困惑-MaskedArray与仅维护值数组和布尔值掩码有何不同?有人可以给我一个例子,其中MaskedArrays更方便或更高效吗?
答案 0 :(得分:1)
据报道here为官方答案:
理论上,IEEE nan是专门为解决该问题而设计的 缺少价值,但现实是不同平台的行为 不同的是,使生活更加困难。在某些平台上, nan的存在会使计算速度降低10到100倍。对于整数数据,否 nan值存在。
实际上,与类似的nans数组相比,掩码数组可能会非常慢:
import numpy as np
g = np.random.random((5000,5000))
indx = np.random.randint(0,4999,(500,2))
g_nan = g.copy()
g_nan[indx] = np.nan
mask = np.full((5000,5000),False,dtype=bool)
mask[indx] = True
g_mask = np.ma.array(g,mask=mask)
%timeit (g_mask + g_mask)**2
1.27 s ± 35.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
(g_nan + g_nan)**2
%timeit (g_nan + g_nan)**2
76.5 ms ± 715 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
在多年的编程中,我发现它们在以下场合很有用:
np.nan
,但同时也屏蔽了SNR较差的值,因此可以同时识别两者。通常,您可以将掩码数组视为更紧凑的表示形式。最好的方法是逐案测试更全面,更有效的解决方案。