保存numpy蒙面数组的最有效方法是什么?遗憾的是numpy.save
不起作用:
import numpy as np
a = np.ma.zeros((500, 500))
np.save('test', a)
这给出了:
NotImplementedError: Not implemented yet, sorry...
一种方法似乎是使用pickle,但遗憾的是效率不高(文件大小很大),而且不依赖于平台。此外,netcdf4似乎可行,但它只是为了保存一个简单的数组而有很大的开销。
之前有人遇到过这个问题吗?我很想做numpy.save
array.data
和另一个为掩码。
答案 0 :(得分:12)
import numpy as np
a = np.ma.zeros((500, 500))
a.dump('test')
然后用
阅读a = np.load('test')
答案 1 :(得分:1)
如果您有不需要保存的固定掩码,那么您只需保存有效值即可:
a = np.ma.MaskedArray(values,mask)
np.save('test', a.compressed())
然后您可以通过以下方式恢复它:
compressed = np.load('test')
values = np.zeros_like(mask, dtype=compressed.dtype)
np.place(values, ~mask, compressed)
a = np.ma.MaskedArray(values, mask)
答案 2 :(得分:0)
一种简单的方法是分别保存掩码数组的数据和掩码:
np.save('DIN_WOA09.npy',DIN_woa.data)
np.save('mask_WOA09.npy',DIN_woa.mask)
然后,您可以从数据和掩码中重建掩码数组。
答案 3 :(得分:0)
将其保存在字典中将使您可以毫无困难地保留其原始格式和掩码。类似的东西:
b={}
b['a'] = a
np.save('b', b)
应该可以正常工作。
答案 4 :(得分:0)
current accepted answer 有点过时,如果存储的数组是稀疏的(它依赖于未压缩的数组酸洗),效率会非常低下。
保存/加载屏蔽数组的更好方法是使用 npz
文件:
import numpy as np
# Saving masked array 'arr':
np.savez_compressed('test.npz', data=arr.data, mask=arr.mask)
# Loading array back
with np.load('test.npz') as npz:
arr = np.ma.MaskedArray(**npz)