在Python中,我使用numpy包对矩阵进行数学运算。在下面的代码中,我试图从我的orignal计算一个新的矩阵。 xFactors
和yFactors
都是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代码,最多需要两秒钟。您对如何优化此代码有任何想法吗?
答案 0 :(得分:2)
如果xFactors
和self.matrix
都是numpy.array
而不是numpy.matrix
(换句话说,如果你在计算newX和newY时使用逐元素乘法而不是矩阵乘法),那么这应该更快地做同样的事情:
from scipy.signal import convolve2d
self.newMatrix = convolve2d(self.matrix, xFactors + yFactors, mode='valid')
在原始代码中,没有明确说明xFactors和yFactors是正方形的。如果他们不是,如果上述添加没有正确播放,则需要根据需要重复它们。