9

我正在尝试保存一个大型 numpy 数组并重新加载它。使用numpy.saveand numpy.load,数组值被破坏/改变。数组预保存和加载后的形状和数据类型是相同的,但加载后数组的绝大多数值都归零。数组是 (22915,22915),值是 float64,将 3.94 gb 作为 .npy 文件,数据条目平均约为 0.1(不是可能合理转换为零的微小浮点数)。我正在使用 numpy 1.5.1。

任何有关为什么会发生这种腐败的帮助将不胜感激,因为我不知所措。下面是一些提供上述声明证据的代码。

In [7]: m
Out[7]: 
      array([[ 0.     ,  0.02023,  0.00703, ...,  0.02362,  0.02939,  0.03656],
             [ 0.02023,  0.     ,  0.0135 , ...,  0.04357,  0.04934,  0.05651],
             [ 0.00703,  0.0135 ,  0.     , ...,  0.03037,  0.03614,  0.04331],
             ..., 
             [ 0.02362,  0.04357,  0.03037, ...,  0.     ,  0.01797,  0.02514],
             [ 0.02939,  0.04934,  0.03614, ...,  0.01797,  0.     ,  0.01919],
             [ 0.03656,  0.05651,  0.04331, ...,  0.02514,  0.01919,  0.     ]])
In [8]: m.shape
Out[8]: (22195, 22195)

In [12]: save('/Users/will/Desktop/m.npy',m)

In [14]: lm = load('/Users/will/Desktop/m.npy')

In [15]: lm
Out[15]: 
       array([[ 0.     ,  0.02023,  0.00703, ...,  0.     ,  0.     ,  0.     ],
              [ 0.     ,  0.     ,  0.     , ...,  0.     ,  0.     ,  0.     ],
              [ 0.     ,  0.     ,  0.     , ...,  0.     ,  0.     ,  0.     ],
              ..., 
              [ 0.     ,  0.     ,  0.     , ...,  0.     ,  0.     ,  0.     ],
              [ 0.     ,  0.     ,  0.     , ...,  0.     ,  0.     ,  0.     ],
              [ 0.     ,  0.     ,  0.     , ...,  0.     ,  0.     ,  0.     ]])
In [17]: type(lm[0][0])
Out[17]: numpy.float64

In [18]: type(m[0][0])
Out[18]: numpy.float64

In [19]: lm.shape
Out[19]: (22195, 22195)
4

1 回答 1

1

这是一个已知问题(请注意,该问题与 numpy 1.4 相关联)。如果您真的无法升级,我的建议是尝试以不同的方式保存(savez、savetxt)。如果 getbuffer 可用,您可以尝试直接写入字节。如果一切都失败了(并且您无法升级),您可以很容易地编写自己的保存功能。

于 2012-10-13T19:02:54.243 回答