Python numpy保存/加载损坏阵列

Python numpy保存/加载损坏阵列,python,numpy,save,large-data,Python,Numpy,Save,Large Data,我正在尝试保存一个大的numpy数组并重新加载它。使用numpy.save和numpy.load,数组值已损坏/更改。预保存数组和后加载数组的形状和数据类型相同,但后加载数组的绝大多数值都已归零。 数组为(2291522915),值为float64,将3.94 gb作为.npy文件,数据项的平均值约为.1(而不是可能合理地转换为零的微小浮点值)。我正在使用NUMPY1.5.1 任何关于为什么会发生这种腐败的帮助都将不胜感激,因为我不知所措。以下是提供上述索赔证据的一些代码 In [7]: m O

我正在尝试保存一个大的numpy数组并重新加载它。使用
numpy.save
numpy.load
,数组值已损坏/更改。预保存数组和后加载数组的形状和数据类型相同,但后加载数组的绝大多数值都已归零。 数组为(2291522915),值为float64,将3.94 gb作为.npy文件,数据项的平均值约为.1(而不是可能合理地转换为零的微小浮点值)。我正在使用NUMPY1.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)

这是一个已知的示例(请注意,链接针对numpy 1.4)。如果您真的无法升级,我的建议是尝试以另一种方式保存(savez、savetxt)。如果getbuffer可用,您可以尝试直接写入字节。如果所有其他操作都失败(并且您无法升级),您可以非常轻松地编写自己的保存函数。

您是否尝试过,或者能够尝试新版本的Numpy?我不能--1.5.1是我正在使用的其他库的依赖项。如果它在更新版本中得到了修复(我进行的搜索中有一些证据),那么也许我可以尝试升级,尽管这可能会导致更多/其他问题。可以尝试以下几件事:1)查找数组归零的位置,2)尝试单独打印数组的最后一行/列(要查看这是否是一个奇怪的打印问题),3)尝试使用内存映射,将
'r'
指定为
加载
的第二个参数。这不是打印问题,但'r'标志起作用。我尝试了其他一些map_模式选项,但它们没有解决问题,所以我放弃了这种方法。非常感谢你的帮助!至于为什么没有map_模式的加载不起作用,您认为直接加载到python中的数组有最大限制吗?@wdwvt1您测试过这些值是否为零吗?我这样问是因为我在Pandas中遇到了一个bug,它将小于0的浮动显示为
0.
,即使它们在内存中被正确表示。