【发布时间】:2015-11-08 17:11:29
【问题描述】:
我想知道:numpy 的 masked arrays 是否能够存储可用值的紧凑表示?换句话说,如果我有一个没有设置值的 numpy 数组,它会以可忽略的大小存储在内存中吗?
其实这不是随便问的问题,我正在开发的一个应用程序需要这样的内存优化。
【问题讨论】:
标签: python numpy matrix scipy linear-algebra
我想知道:numpy 的 masked arrays 是否能够存储可用值的紧凑表示?换句话说,如果我有一个没有设置值的 numpy 数组,它会以可忽略的大小存储在内存中吗?
其实这不是随便问的问题,我正在开发的一个应用程序需要这样的内存优化。
【问题讨论】:
标签: python numpy matrix scipy linear-algebra
没有掩码数组不会更紧凑。
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 天的每月数据。掩码让您可以将数据保持在矩形排列中,并且仍然可以在不使用掩码的值的情况下计算平均值和总和。
【讨论】: