是否有Python等效的MATLAB的conv2函数?

Rya*_*yan 6 python matlab matrix convolution

Python或其任何模块是否具有MATLAB的conv2功能?更具体地说,我对与conv2(A, B, 'same')MATLAB 中进行相同计算的东西感兴趣.

小智 9

虽然其他答案已经提到scipy.signal.convolve2d了等价物,但我发现使用mode='same'.

虽然 Matlabconv2会在图像的底部和右侧产生scipy.signal.convolve2d伪影,但在图像的顶部和左侧具有相同的伪影。

请参阅这些链接以获取显示行为的图(没有足够的声誉直接发布图像):

错综复杂的芭芭拉的左上角

错综复杂的芭芭拉的右下角

以下包装器可能效率不高,但通过将输入数组和输出数组分别旋转 180 度,解决了我的问题:

import numpy as np
from scipy.signal import convolve2d

def conv2(x, y, mode='same'):
    return np.rot90(convolve2d(np.rot90(x, 2), np.rot90(y, 2), mode=mode), 2)
Run Code Online (Sandbox Code Playgroud)


gno*_*ice 5

看起来scipy.signal.convolve2d就是你要找的。

  • 当使用 `same` 模式时,我认为它们实际上并不相同。SciPy 中心与 Matlab 不同。Matlab 说“如果有奇数行或列,“中心”在开头比结尾多留下一个。” SciPy 似乎正好相反。 (2认同)