我正在进行我的第一次Python和NumPy的真正尝试,以进行一些图像处理。我已经加载了一个作为3维NumPy数组的图像,其中轴0表示图像波段,而轴1和轴2表示像素的列和行。从这里,我需要获取代表每个像素的3x1矩阵,并执行一些操作,结果是另一个3x1矩阵,将用于构建结果图像。
我的第一种方法(简化并使用随机数据)如下:
但是我觉得这样做不够优雅也不够高效。有没有一种逐元素的方式来完成这个操作,例如:
在试图解决这个问题时,我发现了这个问题很相似的帖子。然而,作者无法满意地解决该问题。我希望自2012年以来有些改变,或者我的问题与他们的不同,使得更容易解决。
我的第一种方法(简化并使用随机数据)如下:
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年以来有些改变,或者我的问题与他们的不同,使得更容易解决。
results = np.einsum('ij,klj->kli',factor,input)
- Luigolas