2015-04-17 4 views
1

Я пытаюсь закодировать мультиспектральное изображение.numpy multiply элементы массива с другим массивом

Значение каждого пикселя кодируется в 33 каналах.

У меня есть два Numpy массивы image и spectral_range

Например, один изображение имеет 4 х 4 пикселей:

image = np.array([[[1,2,4,3],[2,2,2,1],[1,2,3,2],[5,4,3,2]]) 

И для каждого пикселя должны быть связаны 33 значений спектрального диапазона, охваченных изображение:

spectral_range = np.array([0,0,0,0,0,0,0,1,23,99,166,86,54,12,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]) 

Как я могу просто создать np.array фигуры (width, height, 33), где каждый пиксель 33 Валу es - 33 значения массива spectrum, умноженные на отдельные значения массива image?

Ожидаемый результат выглядит следующим образом:

result = np.array([[[0,0,0,0,0,0,0,1,23,99,166,86,54,12,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,2,46,198,...etc.]]]) 

Спасибо за помощь

ответ

5

Вам просто нужно добавить дополнительную ось image, а затем умножить этот массив с spectral_range. Дополнительная ось делает две передаваемые между собой массивы:

>>> result = image[:, :, np.newaxis] * spectral_range 
>>> result.shape 
(4, 4, 33) 
>>> result 
array([[[ 0, 0, 0, 0, 0, 0, 0, 1, 23, 99, 166, 86, 54, 
      12, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
      0, 0, 0, 0, 0, 0, 0], 
     [ 0, 0, 0, 0, 0, 0, 0, 2, 46, 198, 332, 172, 108, 
      24, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
      0, 0, 0, 0, 0, 0, 0], 
     ... 
Смежные вопросы