2016-07-13 2 views
0

Ich versuche, eine Tensor-Daten zu analysieren, aber ich konnte die Daten in der ausgewählten Datei nicht mit np.load() lesen. Mein Python-Code ist wie folgt:Warum konnte np.load() meine ndarray-Daten nicht in einer gebeizten Datei lesen?

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) 

Aber als ich versuchte np.load() zu verwenden, um die Daten in data.bat zu laden, wie folgt:

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

Einige Fehler erscheint als“

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. 

Wer kann mir helfen?

+0

'pickle.load' Paare mit' pickle.dump' und 'np.load' Paare mit' np.save'. Es gibt ein gewisses Wechselspiel zwischen Beizen und anzahligem Laden/Speichern. 'save' verwendet Pickle für Dinge, die nicht als numerisches Array gespeichert werden können. Und das 'pickle' eines Arrays ist eine Version des' save'. Aber lassen Sie den Code sich um diese Details kümmern. Mischen Sie sie nicht selbst. – hpaulj

+0

@hpaulj, Vielen Dank für Ihren Vorschlag. –

Antwort

0

nicht die Gurke Modul NumPy verwenden Sie Arrays zu speichern. Stattdessen hier eine der Methoden verwenden : http://docs.scipy.org/doc/numpy/reference/routines.io.html

Es gibt sogar eine, die Gurke unter der Haube, zum Beispiel verwendet:

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

Ein anderes Format wie CSV oder HDF5 für die meisten Anwendungen besser geeignet sein könnte - vor allem, wenn Sie mit nicht zusammenarbeiten möchten -Python-Systeme.

+0

Danke! Es funktioniert wirklich. –

+0

@ 刘飞燕: Großartig. Wenn dies Ihr Problem gelöst hat, klicken Sie bitte auf das Häkchen auf der linken Seite, um diese Antwort zu akzeptieren. Willkommen bei Stack Overflow. –