11

保存 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,另一个做面具。

4

5 回答 5

13
import numpy as np
a = np.ma.zeros((500, 500))
a.dump('test')

然后阅读它

a = np.load('test')
于 2012-12-14T10:44:35.427 回答
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)
于 2018-11-27T01:05:35.323 回答
1

一种简单的方法是分别保存掩码数组的数据和掩码:

np.save('DIN_WOA09.npy',DIN_woa.data)

np.save('mask_WOA09.npy',DIN_woa.mask)

然后稍后,您可以从数据和掩码中重建掩码数组。

于 2019-06-10T11:48:18.403 回答
1

当前接受的答案有些过时,如果存储的数组是稀疏的(它依赖于数组的未压缩酸洗),效率会非常低。

保存/加载掩码数组的更好方法是使用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)
于 2021-02-26T10:52:04.947 回答
0

将其保存在字典中将使您可以毫无问题地保持其原始格式和掩码。就像是:

b={}
b['a'] = a
np.save('b', b)

应该可以正常工作。

于 2021-02-24T19:01:39.657 回答