python - NumPy 中的逐元素矩阵乘法

标签 python arrays image-processing numpy matrix-multiplication

我第一次真正涉足 Python 和 NumPy 来做一些图像处理。我有一个加载为 3 维 NumPy 数组的图像,其中轴 0 代表图像波段,而轴 1 和 2 代表像素的列和行。由此,我需要采用代表每个像素的 3x1 矩阵并执行一些操作,从而生成另一个 3x1 矩阵,该矩阵将用于构建结果图像。

我的第一种方法(简化并使用随机数据)如下所示:

import numpy as np
import random

factor = np.random.rand(3,3)
input = np.random.rand(3,100,100)
results = np.zeros((3,100,100))

for x in range(100):
    for y in range(100):
        results[:,x,y] = np.dot(factor,input[:,x,y])

但这让我觉得既不优雅又低效。有没有办法在元素方面做到这一点,例如:

results = np.dot(factor,input,ElementWiseOnAxis0)

在试图找到这个问题的解决方案时,我遇到了 this问题,这显然非常相似。但是,提交人无法使他们满意地解决问题。我希望要么自 2012 年以来发生了一些变化,要么我的问题与他们的问题有很大不同,以便更容易解决。

最佳答案

Numpy 数组默认使用逐元素乘法。查看numpy.einsumnumpy.tensordot .我认为您正在寻找的是这样的东西:

results = np.einsum('ij,jkl->ikl',factor,input)

关于python - NumPy 中的逐元素矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25922212/

相关文章:

c++ - OpenCV:了解内核

python - 关于 Python 类的初学者问题

java - 尽管有参数,仍需要 : no arguments, 吗?

html - 如何用点替换逗号

javascript更新或向数组添加值

python测量两个相似图像的质量

iphone - 镜像+iPhone

python - 如何在输入深度神经网络模型之前对数据进行标准化

python - Docker ModuleNotFoundError 即使该模块不再包含在代码中

python - 在python中使用getlist和flask获取多个同名的html字段