#python #loops #numpy #multidimensional-array #numpy-ndarray
#python #циклы #numpy #многомерный массив #numpy-ndarray
Вопрос:
Я запускаю цикл на двух подтаблицах моей исходной таблицы.
Когда я запускаю цикл и проверяю форму, я получаю (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. Является ли эта форма(1008,) train_2 или train_images2 ?
2. Каков dtype массива?
3. Убедитесь, что все изображения, которые вы помещаете в список, имеют одинаковую форму. Если они этого не сделают, то при
train_images2
преобразовании в массив это будет одномерный массив с типом данныхobject
.4. Пожалуйста, не создавайте больше работы для других людей, вандализируя ваши сообщения. Публикуя в сети Stack Exchange, вы предоставляете Stack Exchange не подлежащее отзыву право в соответствии с лицензией CC BY-SA 4.0 на распространение этого контента (т. Е. Независимо от ваших будущих решений). Согласно политике обмена стеками, распространяется версия post, не подвергшаяся вандализму. Таким образом, любой вандализм будет отменен. Если вы хотите узнать больше об удалении записи, пожалуйста, смотрите: Как работает удаление?
Ответ №1:
Проблема в том, что ваша process_image()
функция возвращает скаляр вместо обработанного изображения (т. Е. 3D-массив формы (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()
функция возвращает 3D-массив, как в приведенном ниже надуманном примере:
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)