Numpy 的掩码数组内存效率高吗?
is Numpy's masked array memory efficient?
我想知道:numpy 的 masked arrays 是否能够存储可用值的紧凑表示?换句话说,如果我有一个没有设置值的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
仅存储数组的非零值,尽管 space 节省取决于存储格式和稀疏性。所以你可以用稀疏性来模拟你的掩蔽。或者您可以从该表示中获取灵感。
你打算用这些数组做什么?只是访问项目,还是进行计算?
掩码数组最适用于大部分质量较好且具有少量 'bad' 值的数据。例如,现实生活中偶尔出现故障的数据系列,或将月度数据填充到 31 天。掩码可让您将数据保持在矩形排列中,并且仍然可以在不使用掩码值的情况下计算平均值和总和等内容。
我想知道:numpy 的 masked arrays 是否能够存储可用值的紧凑表示?换句话说,如果我有一个没有设置值的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
仅存储数组的非零值,尽管 space 节省取决于存储格式和稀疏性。所以你可以用稀疏性来模拟你的掩蔽。或者您可以从该表示中获取灵感。
你打算用这些数组做什么?只是访问项目,还是进行计算?
掩码数组最适用于大部分质量较好且具有少量 'bad' 值的数据。例如,现实生活中偶尔出现故障的数据系列,或将月度数据填充到 31 天。掩码可让您将数据保持在矩形排列中,并且仍然可以在不使用掩码值的情况下计算平均值和总和等内容。