我想知道:numpy的掩码数组是否能够存储可用值的紧凑表示?换句话说,如果我有一个没有设置值的numpy数组,它是否会存储在内存中,大小可以忽略不计?
实际上,这不仅仅是一个偶然的问题,但是我需要为我正在开发的应用程序进行内存优化。
不,掩码数组不会更紧凑。
In [344]: m = np.ma.masked_array([1,2,3,4],[1,0,0,1])
In [345]: m
Out[345]:
masked_array(data = [-- 2 3 --],
mask = [ True False False True],
fill_value = 999999)
In [346]: m.data
Out[346]: array([1, 2, 3, 4])
In [347]: m.mask
Out[347]: array([ True, False, False, True], dtype=bool)
包含原始(完整)数组和掩码。掩码可以是标量,也可以是与数据形状相同的布尔数组。
scipy.sparse
只存储数组的非零值,尽管节省的空间取决于存储格式和稀疏性。所以你可以用稀疏度来模拟掩蔽。或者你也可以从这种表现中汲取灵感。
你打算怎么处理这些数组?只是访问项目,还是进行计算?
掩码数组对于大多数数据是好的,有少量的"坏"值是最有用的。例如,偶尔出现故障的真实生活数据系列,或填充到31天的每月数据。遮罩可以让你保持数据的矩形排列,并且仍然计算像平均值和总和这样的东西,而不使用遮罩值。