【问题标题】:How to save numpy masked array to file如何将numpy掩码数组保存到文件
【发布时间】:2012-12-14 10:42:19
【问题描述】:

保存 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.savearray.data 和另一个面具。

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    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)
    

    【讨论】:

    • 几乎十年后东西往往会变得过时......
    • @tiago 因此我发布了更新:-)(我希望这听起来不像我在批评以前的答案:它是当时最好的,只是不再)
    【解决方案2】:
    import numpy as np
    a = np.ma.zeros((500, 500))
    a.dump('test')
    

    然后阅读它

    a = np.load('test')
    

    【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      如果您有不需要保存的固定掩码,则只需保存有效值即可:

      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)
      

      【讨论】:

        【解决方案5】:

        将其保存在字典中将使您可以毫无问题地保留其原始格式和掩码。比如:

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

        应该可以正常工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-07
          • 2016-06-21
          • 2018-12-15
          • 2017-11-02
          • 2016-03-28
          • 2016-06-12
          • 2012-03-22
          • 1970-01-01
          相关资源
          最近更新 更多