如何将numpy蒙面数组保存到文件中

时间:2012-12-14 10:42:19

标签: python numpy

保存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和另一个为掩码。

5 个答案:

答案 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)