2016-07-13 7 views
0

テンソルデータを分析しようとしていますが、np.load()を使用して選択したファイルのデータを読み取ることができませんでした。次のように私のPythonコードは次のとおりです。なぜnp.load()はpickledファイル内のndarrayデータを読み取れなかったのですか?

import pickle 
import numpy as np 
import sktensor as skt 
import numpy.random as rn 

data = np.ones((10, 8, 3), dtype='int32') # 3-mode count tensor of size 10 x 8 x 3 
##data = skt.dtensor(data) 

with open('data.dat', 'w+') as f: # can be stored as a .dat using pickle 
    pickle.dump(data, f) 

with open('data.dat', 'r+') as f: # can be loaded back in using pickle.load 
    tmp = pickle.load(f) 
    assert np.allclose(tmp, data) 

をしかし、私は次のようにdata.batにデータをロードする)(np.loadを使用しようとしたとき:

np.load('G:\data.dat') 

いくつかのエラーが

「として表示されます
Traceback (most recent call last): 
    File "<pyshell#34>", line 1, in <module> 
    np.load('D:/GDELT_Tensor/data.dat', mmap_mode = 'r') 
    File "C:\Python27\lib\site-packages\numpy\lib\npyio.py", line 416, in load 
    "Failed to interpret file %s as a pickle" % repr(file)) 
IOError: Failed to interpret file 'D:/data.dat' as a pickle. 

誰もが私を助けることができる?

+0

'pickle.load'は' pickle.dump'と、 'np.load'は' np.save'と対になります。 pickleとnumpyのロード/セーブの間には一定の相互作用があります。 'save'は数値配列として保存できないもののためにpickleを使います。配列の 'pickle'は' save'のバージョンです。しかし、そのコードがその詳細を処理するようにしてください。自分で混ぜないでください。 – hpaulj

+0

@hpaulj、ありがとうございます。 –

答えて

0

がnumpyのアレイを保存するためにpickleモジュールを使用しないでください。その代わりに、ここでの方法のいずれかを使用します:例えば、ボンネットの下にピクルスを使用しています一つでもありますhttp://docs.scipy.org/doc/numpy/reference/routines.io.html

:CSVまたはHDF5のような別の形式は、ほとんどのアプリケーションのために、より適しているかもしれません

np.save('data.dat', data) 
tmp = np.load('data.dat') 

- あなたは非と相互運用することをお勧めします特に-Pythonシステム。

+0

ありがとう!それは実際に動作します。 –

+0

@刘飞燕:素晴らしい。これで問題が解決した場合は、左側のチェックマークをクリックしてこの回答を「受け入れる」ことができます。スタックオーバーフローへようこそ。 –

関連する問題