web-dev-qa-db-fra.com

Enregistrer Numpy Array en utilisant Pickle

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)
1
Anant

Vous devez utiliser numpy.save et numpy.load .

6
piokuc

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.

1
hpaulj