Сохранить Numpy Array с помощью Pickle - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть массив Numpy, который я хотел бы сохранить (130 000 x 3), который я хотел бы сохранить с помощью Pickle, со следующим кодом.Тем не менее, я получаю сообщение об ошибке «EOFError: Out out of input» или «UnsupportedOperation: read» в строке pkl.load.Это мой первый раз, когда я использую Pickle, есть идеи?

Спасибо,

Anant

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)

Ответы [ 4 ]

0 голосов
/ 26 июня 2019

Вы должны использовать numpy.save() для сохранения матриц.

0 голосов
/ 21 сентября 2018

У меня нет проблем с использованием 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 и np.save/load имеют глубокую взаимность.Как я могу загрузить этот рассол с помощью np.load:

In [129]: np.load('test.pkl').shape
Out[129]: (1000, 2)

Если я открою файл рассола неправильно, я получу вашу ошибку:

In [130]: with open('test.pkl','wb') as f:
     ...:     x = pickle.load(f)
     ...:     print(x.shape)
     ...:    
UnsupportedOperation: read

Но это не должно бытьУдивительно - вы не можете прочитать недавно открытый файл записи.Он будет пустым.

np.save/load - это обычная пара для записи пустых массивов.Но pickle использует save для сериализации массивов, а save использует pickle для сериализации объектов, не являющихся массивами (в массиве).Результирующие размеры файлов похожи.Любопытно, что время рассола версия быстрее.

0 голосов
/ 18 апреля 2019

Это было немного, но если вы нашли это, Pickle завершает работу за долю времени.

with open('filename','wb') as f: pickle.dump(arrayname, f)

with open('filename','rb') as f: arrayname1 = pickle.load(f)

numpy.array_equal(arrayname,arrayname1) #sanity check

С другой стороны, по умолчанию numpy сжатие уменьшило мои 5.2GB до .4GBи Пикл пошел на 1,7 ГБ.

0 голосов
/ 21 сентября 2018

Вы должны использовать numpy.save и numpy.load .

...