Интерпретация numpy ndarray - PullRequest
0 голосов
/ 27 февраля 2019

Предположим, я хочу представить изображение размером H * W с 3 цветовыми каналами (RGB) в массивном трехмерном массиве, так чтобы размер был (H, W, 3).Давайте возьмем простой пример (4,2,3).Таким образом, мы создаем массив, подобный этому - img = np.arange(24).reshape(4,2,3).

Чтобы соответствовать аналогии с приведенным выше примером изображения, значения элементов должны быть -

Channel R: [0,1],[2,3],[4,5],[6,7]
Channel G: [8,9],[10,11],[12,13],[14,15]
Channel B: [16,17],[18,19],[20,21],[22,24]

, т. Е. 3внешний массив и выше массивы, вложенные внутрь.

Однако, результат np.arange(24).reshape(4,2,3) будет -

array([[[ 0,  1,  2],
        [ 3,  4,  5]],

       [[ 6,  7,  8],
        [ 9, 10, 11]],

       [[12, 13, 14],
        [15, 16, 17]],

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

Если я хочу первую строку первого канала, то есть img[0,:,0], яожидал [0,1] как результат, но я на самом деле получу [0,3] обратно.

Я понимаю, что если я инициализирую ndarray с формой (3,4,2), я получу то, чтоЯ ищу.Но я хочу работать с обычной формой (H, W, глубина).

Не могли бы вы помочь мне понять пробел в моем понимании?

1 Ответ

0 голосов
/ 27 февраля 2019

Я думаю, ваше недоразумение происходит потому, что вы (ошибочно) предполагаете, что преобразование вектора в массив начинает заполнять первый индекс первым.Действительно, он начинается с последнего индекса и движется вперед.В вашем примере порядок заполнения массива:

0 -> [0,0,0]

1 -> [0,0,1]

2 -> [0,0,2]

3 -> [0,1,0] и т. Д.

Таким образом, первый пиксель равен [0,1,2], второйпиксель [3,4,5] и вы получите именно те результаты, которые видите.

Недоразумение заключается исключительно в вашей идее, как вектор преобразуется в такую ​​матрицу (и сохраняется в фоновом режиме).После того, как вы определили изображение, все должно быть так, как вы ожидаете.

В качестве отступления: вы действительно можете столкнуться с изображениями, которые сохранены с размером [3, X, Y], как прокомментировал hpaulj.

...