Создайте массив numpy внутри цикла for - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь загрузить базу данных из моего кода Python, который содержит список словарей. Для каждого элемента списка словарь содержит имя файла подсписка, который содержит n различных словарей, имя файла и данные которых представляют собой пустую матрицу размером 40x40x3 и соответствуют изображению. Я хочу в цикле for хранить все эти изображения в виде файла размером Nx40x40x3.

for item in dataset: 
    print item["name"] # the name of the list
    print item["data"] # a list of dictionaries
    for row in item["data"]:
      print row["sub_name"] # the name of the image
      print row["sub_data"] # contains an numpy array (my image) 

Каким образом я могу создать массив с добавлением всех изображений?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Чтобы сделать это, вам нужно либо использовать тип данных, размер которого можно изменить, как я сделал в своем другом ответе , либо вы также можете выяснить, сколько изображений у вас до определение массива. (По предложению @ P.Camilleri)

Вот пример этого:

# Count nuber of images
idx_count = 0
for item in dataset:
    idx_count += len(item['data'])

# Create an empty numpy array that's Nx3x3
images = np.empty((count, 3, 3))

# Populate numpy array with images
idx = 0
for item in dataset:
    for row in item["data"]:
        images[idx] = row["sub_data"]
        idx += 1

print(images)

Преимущество этого заключается в том, что вы выделяете пространство только один раз, в отличие от использования списка Python, где он сначала добавляется в список , а затем , копируемый в пустой массив.

Однако это за счет необходимости повторять данные дважды.

(Примечание: два отдельных ответа, поэтому их можно оценивать отдельно, так как я не уверен, какое решение лучше.)

0 голосов
/ 02 мая 2018

Массивы NumPy имеют фиксированные размеры , поэтому, если вы не знаете размер заранее, вам придется использовать что-то, что может изменить размеры, например списки Python.

import numpy as np

images = []

for item in dataset:
    for row in item["data"]:
        images.append(row["sub_data"]) # Add to list

images = np.array(images) # Convert list to np.array()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...