python - numpy 将数组元素与另一个数组相乘

标签 python arrays numpy

我正在尝试对多光谱图像进行编码。

每个像素的值都在 33 个 channel 中编码。

我有两个 numpy 数组 imagespectral_range

例如一张图片有 4 x 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])

我怎样才能简单地创建一个形状为 (width, height, 33) 的 np.array,其中每个像素的 33 个值是数组 spectrum 的 33 个值相乘通过数组 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.]]])

感谢帮助

最佳答案

您只需向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],
        ...

关于python - numpy 将数组元素与另一个数组相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29708330/

相关文章:

c - 以下二维数组声明之间有什么区别?

c# - 我如何比较两个锯齿状数组中的数组 C#

python - 如果在 Django 中输入任何无效数据,则在输入字段下方引发表单错误

python - 使用箭头从带有时区的字符串中解析日期和时间

python宽度语法错误

python - 无法弄清楚使用什么输入来使 cv2.calcOpticalFlowPyrLK 方法起作用

python - 具有多个 bool 数组的 Numpy 多维切片

python - Django - 某些 View 的用户权限?

java - 尝试提示我的数组输入 10 个数字来执行模式

python - 需要 matplotlib 中日期时间系列 3D 绘图的帮助