NumPy中的逐元素矩阵乘法

我正在第一次真正进军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)

在尝试找到该问题的解决方案时,我遇到了这个问题,这显然很相似。但是,作者无法解决他们满意的问题。我希望自2012年以来有所改变,或者我的问题与他们的问题有很大不同,以使其更容易解决。

回答:

默认情况下,Numpy数组使用逐元素乘法。签出numpy.einsum和numpy.tensordot。我认为您要寻找的是这样的:

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

以上是 NumPy中的逐元素矩阵乘法 的全部内容, 来源链接: utcz.com/qa/417706.html

回到顶部