Python np.asarray не возвращает истинную форму - PullRequest
1 голос
/ 14 апреля 2019

Я вращаю петлю на двух подстолях моей исходной таблицы.

Когда я запускаю цикл и проверяю форму, я получаю (1008,), а форма должна быть (1008,168,252,3). Есть ли проблема в моей петле?

train_images2 = []
for i in range(len(train_2)):
  im = process_image(Image.open(train_2['Path'][i]))
  train_images2.append(im)
train_images2 = np.asarray(train_images2)

1 Ответ

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

Проблема в том, что ваша функция process_image() возвращает скаляр вместо обработанного изображения (т.е. трехмерный массив формы (168,252,3)). Итак, переменная im это просто скаляр. Из-за этого вы получаете массив train_images2 как одномерный массив. Ниже приведен надуманный пример, который иллюстрирует это:

In [59]: train_2 = range(1008)
In [65]: train_images2 = []

In [66]: for i in range(len(train_2)):
    ...:     im = np.random.random_sample()
    ...:     train_images2.append(im)
    ...: train_images2 = np.asarray(train_images2)
    ...: 

In [67]: train_images2.shape
Out[67]: (1008,)

Итак, исправление заключается в том, что вы должны убедиться, что функция process_image() возвращает трехмерный массив, как в приведенном ниже надуманном примере:

In [58]: train_images2 = []
In [59]: train_2 = range(1008)

In [60]: for i in range(len(train_2)):
    ...:     im = np.random.random_sample((168,252,3))
    ...:     train_images2.append(im)
    ...: train_images2 = np.asarray(train_images2)
    ...: 

# indeed a 4D array as you expected
In [61]: train_images2.shape
Out[61]: (1008, 168, 252, 3)
...