Python NumPy中的元素矩阵乘法

Python NumPy中的元素矩阵乘法,python,arrays,image-processing,numpy,matrix-multiplication,Python,Arrays,Image Processing,Numpy,Matrix Multiplication,我第一次真正尝试Python和NumPy来做一些图像处理。我将图像加载为三维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) result

我第一次真正尝试Python和NumPy来做一些图像处理。我将图像加载为三维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.einsum('ij,jkl->ikl',factor,input)
但这让我觉得不够优雅,效率低下。是否有一种方法可以在元素方面实现这一点,例如:

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

在试图找到这个问题的解决方案时,我遇到了一个问题,这个问题显然非常相似。然而,提交人未能使他们满意地解决这个问题。我希望自2012年以来有所改变,或者我的问题与他们的问题完全不同,使其更容易解决。

默认情况下,Numpy数组使用元素相乘。查看numpy.einsum和numpy.tensordot。我想你要找的是这样的东西:

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.einsum('ij,jkl->ikl',factor,input)

这对这些数据非常有效,并且应该也适用于类似的问题,谢谢!在我的例子中,输入形状是:(1001003)。我花了一些时间去理解它,但可能对其他人有用。在我的例子中是:results=np.einsum('ij,klj->kli',factor,input)