NumPy中的逐元素矩阵乘法
我正在第一次真正进军Python和NumPy进行图像处理。我将图像加载为3维NumPy数组,其中轴0代表图像带,而轴1和2代表像素的列和行。由此,我需要获取代表每个像素的3x1矩阵并执行一些操作,从而生成另一个3x1矩阵,该矩阵将用于构建结果图像。
我的第一种方法(经过简化并使用随机数据)如下所示:
import numpy as npimport 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)
在尝试找到该问题的解决方案时,我遇到了这个问题,这显然很相似。但是,作者无法解决他们满意的问题。我希望自2012年以来有所改变,或者我的问题与他们的问题有很大不同,以使其更容易解决。
回答:
默认情况下,Numpy数组使用逐元素乘法。签出numpy.einsum和numpy.tensordot。我认为您要寻找的是这样的:
results = np.einsum('ij,jkl->ikl',factor,input)
以上是 NumPy中的逐元素矩阵乘法 的全部内容, 来源链接: utcz.com/qa/417706.html