#python #numpy #numpy-ndarray
Вопрос:
Я создал npz(сжатый файл) , используя следующий код:
import pandas as pd
from tqdm import tqdm
from keras.preprocessing import image
import numpy as np # for mathematical operations
from keras.preprocessing import image # for preprocessing the images
anomoly_data = pd.read_csv('/code_data/anomoly_data.csv')
f = open('/code_data/anomoly_data.npz', 'wb')
for i in tqdm(range(anomoly_data.shape[0])):
img = image.load_img(anomoly_data['image'][i], target_size=(224,224,3))
# converting it to array
img = image.img_to_array(img)
# normalizing the pixel value
img = img/255
np.savez_compressed(f, img)
f.close()
сжатый файл имеет размер 52 Гб, что указывает на то, что он содержит данные всех изображений.
в файле anomoly_data.csv у меня есть путь для каждого изображения, а записи в файле .csv
188604
и теперь я пытаюсь прочитать данные всех изображений из сжатых, используя следующий код:
f=open("/code_data/anomoly_data.npz","rb")
for i in tqdm(range(anomoly_data.shape[0])):
img=np.load(f)
print(img)
и затем я получаю эту ошибку, сообщающую мне, что в сжатом файле есть только один ndarray, Ошибка:
<numpy.lib.npyio.NpzFile object at 0x7fdfd1d437c0>
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-7-29b2878e9fe9> in <module>
1 f=open("/code_data/anomoly_data.npz","rb")
2 for i in range(anomoly_data.shape[0]):
----> 3 img=np.load(f)
4 print(img)
5
~/Programs/Anaconda/lib/python3.8/site-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
442 # Try a pickle
443 if not allow_pickle:
--> 444 raise ValueError("Cannot load file containing pickled data "
445 "when allow_pickle=False")
446 try:
ValueError: Cannot load file containing pickled data when allow_pickle=False
но я получаю данные только из одного массива, что говорит о том, что либо есть данные только одного изображения, либо оно деформировано. это означает, что сжатый файл не генерируется должным образом.
есть ли лучший способ сделать это?
Комментарии:
1.
np.save
есть пример записи и загрузки нескольких массивов в один файл. Используя эту модель, вы сможете сохранять свои изображения в цикле.np.savez
создаетzip
архив, поэтому я не знаю, работает ли там этот метод повторного сохранения. Я не видел и не тестировал рабочий пример.2. @hpaulj я загружаю в файл только 5 изображений, используя,
np.save
,np.savez
,np.savez__compressed
а сравнение размеров составляет 3 МБ,3 МБ и 700 КБ соответственно. Я работаю с большим набором данных, поэтому используюnp.save
илиnp.savez
потребляю огромное пространство памяти около 200 ГБ.3. Что важнее-размер или функциональность? Насколько я знаю
compressed
, это еще один слой поверхzip
архива. Я не знаю, затрудняет ли это доступ или нет. Заставьте код работать с несколькими массивами; большой размер может появиться позже.4. Я думаю, вам нужно поэкспериментировать
np.save
только с одним изображением. Делайте маленькие шаги.5. очевидно, что функциональность важнее. Большое спасибо.