9

大きなnumpy配列を保存してリロードしようとしています。とを使用するnumpy.savenumpy.load、配列の値が破損/変更されます。保存前と読み込み後の配列の形状とデータ型は同じですが、読み込み後の配列では値の大部分がゼロになっています。配列は (22915,22915) で、値は float64 で、.npy ファイルとして 3.94 GB を取り、データ エントリの平均は約 .1 です (合理的にゼロに変換される可能性のある小さな float ではありません)。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 に答える