我正在尝试保存一个大的numpy数组并重新加载它。使用numpy.save
和numpy.load
,数组值已损坏/更改。阵列预保存和后加载的形状和数据类型是相同的,但后加载阵列的绝大部分值都归零。
该数组为(22915,22915),值为float64,取3.94 gb作为.npy文件,数据条目平均为.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)
答案 0 :(得分:1)
这是一个已知的issue(请注意,它与numpy 1.4相关联)。如果你真的无法升级,我的建议是尝试以不同的方式保存(savez,savetxt)。如果getbuffer可用,您可以尝试直接写入字节。如果所有其他方法都失败了(并且您无法升级),您可以非常轻松地编写自己的保存功能。