Как определить кортеж формы np.reshape (изображение, (форма)) на основе структуры изображения - PullRequest
0 голосов
/ 27 апреля 2018

Я работаю с набором данных CIFAR 10 и у меня возникла та же проблема при извлечении изображения из набора данных, как в этом посте

загрузка изображения из набора данных cifar-10

Изображения в этом наборе данных имеют следующую структуру -

В каждом массиве хранится цветное изображение 32x32. Первые 1024 записи содержат значения красного канала, следующие 1024 зеленого и последние 1024 Синий. Изображение сохраняется в основном порядке строк, так что первые 32 Записи массива являются значениями красного канала первой строки изображение.

Для извлечения изображения, которое я делаю (что я делал ранее и работал)

df_im = np.reshape (df ['data'], (df ['data']. Shape [0], 32,32,3))

Не работает Image

Это изменение формы не работает должным образом.

Но это работает -

df_im = np.reshape (df ['data'], (df ['data']. Shape [0], 3,32,32))

Рабочее изображение

Почему последний работал в этом случае, но не первый. И как определить кортеж np.reshape «shape» на основе уплощенной структуры массива.

1 Ответ

0 голосов
/ 27 апреля 2018

Давайте воссоздадим данные с меньшими «изображениями»:

In [68]: R = np.arange(4)
In [69]: G = np.arange(10,14)
In [70]: B = np.arange(20,24)
In [71]: rgb = np.hstack([R,G,B])
In [72]: rgb
Out[72]: array([ 0,  1,  2,  3, 10, 11, 12, 13, 20, 21, 22, 23])

Это похоже на одно из ваших изображений, не так ли? Первые N значений «красные», следующие N «зеленые» и т. Д.>

Изменить на 2d:

In [73]: rgb.reshape(3,4)
Out[73]: 
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23]])

изменить на 3d:

In [74]: rgb.reshape(3,2,2)
Out[74]: 
array([[[ 0,  1],
        [ 2,  3]],

       [[10, 11],
        [12, 13]],

       [[20, 21],
        [22, 23]]])

«строка-ряд» означает, что первое измерение является самым внешним и изменяется медленнее. Последнее измерение - внутреннее.

In [75]: rgb.reshape(2,2,3)
Out[75]: 
array([[[ 0,  1,  2],
        [ 3, 10, 11]],

       [[12, 13, 20],
        [21, 22, 23]]])

reshape сохраняет порядок элементов данных. Это просто меняет их вид, разделение, так сказать на плоскости, строки и столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...