低效的numpy代码

时间:2016-11-13 11:38:49

标签: python numpy matrix

在Python中,我使用numpy包对矩阵进行数学运算。在下面的代码中,我试图从我的orignal计算一个新的矩阵。 xFactorsyFactors都是3x3矩阵。

size = self.matrix.shape

for x in range(1, size[0] - 1):
    for y in range(1, size[1] - 1):
        subMatrix = self.matrix[x-1:x+2, y-1:y+2]

        newX = (xFactors * subMatrix).sum()
        newY = (yFactors * subMatrix).sum()

        self.newMatrix[x-1][y-1] = newX + newY

我的问题是这段代码效率很低。我使用500x500矩阵测试了te代码,最多需要两秒钟。您对如何优化此代码有任何想法吗?

1 个答案:

答案 0 :(得分:2)

如果xFactorsself.matrix都是numpy.array而不是numpy.matrix(换句话说,如果你在计算newX和newY时使用逐元素乘法而不是矩阵乘法),那么这应该更快地做同样的事情:

from scipy.signal import convolve2d

self.newMatrix = convolve2d(self.matrix, xFactors + yFactors, mode='valid')

在原始代码中,没有明确说明xFactors和yFactors是正方形的。如果他们不是,如果上述添加没有正确播放,则需要根据需要重复它们。