J'ai un tableau Numpy que j'aimerais enregistrer (130 000 x 3) et que j'aimerais enregistrer à l'aide de Pickle, avec le code suivant. Cependant, le message d'erreur "EOFError: Ran out of input" ou "UnsupportedOperation: read" continue de me parvenir. C'est la première fois que j'utilise Pickle, des idées?
Merci,
Une fourmi
import pickle as pkl
import numpy as np
arrayInput = np.zeros((1000,2)) #Trial input
save = True
load = True
filename = path + 'CNN_Input'
fileObject = open(fileName, 'wb')
if save:
pkl.dump(arrayInput, fileObject)
fileObject.close()
if load:
fileObject2 = open(fileName, 'wb')
modelInput = pkl.load(fileObject2)
fileObject2.close()
if arrayInput == modelInput:
Print(True)
Vous devez utiliser numpy.save et numpy.load .
Je n'ai aucun problème à utiliser pickle
:
In [126]: arr = np.zeros((1000,2))
In [127]: with open('test.pkl','wb') as f:
...: pickle.dump(arr, f)
...:
In [128]: with open('test.pkl','rb') as f:
...: x = pickle.load(f)
...: print(x.shape)
...:
...:
(1000, 2)
pickle
et np.save/load
ont une réciprocité profonde. Comme si je pouvais charger ce cornichon avec np.load
:
In [129]: np.load('test.pkl').shape
Out[129]: (1000, 2)
Si j'ouvre le fichier pickle dans le mauvais sens, j'obtiens votre erreur:
In [130]: with open('test.pkl','wb') as f:
...: x = pickle.load(f)
...: print(x.shape)
...:
UnsupportedOperation: read
Mais cela ne devrait pas être surprenant - vous ne pouvez pas lire un fichier d'écriture fraîchement ouvert. Ce sera vide.
np.save/load
est la paire habituelle pour écrire des tableaux numpy. Mais pickle utilise save
pour sérialiser des tableaux, et save
utilise pickle pour sérialiser des objets non-array (dans le tableau). Les tailles de fichier résultantes sont similaires. Curieusement dans les timings la version cornichon est plus rapide.