低效鳕鱼

2024-10-06 07:04:24 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,我使用numpy包对矩阵进行一些计算。在下面的代码中,我试图从我的原始文件计算一个新的矩阵。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代码,它最多需要两秒钟。你有什么想法我可以优化这个代码?你知道吗


Tags: 代码inselfnumpyforsizerange矩阵
1条回答
网友
1楼 · 发布于 2024-10-06 07:04:24

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

from scipy.signal import convolve2d

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

在原始代码中,没有明确说明xFactors和yFactors是正方形的。如果不是这样的话,如果上面的加法不能正确播放的话,就需要根据需要重复它们,使它们成为正方形。你知道吗

相关问题 更多 >