Python中有没有MATLAB的conv2函数的等效?
Python或者它的某些模块有没有类似于MATLAB中conv2
函数的功能呢?更具体一点,我想找的是能做和MATLAB中conv2(A, B, 'same')
一样计算的东西。
4 个回答
1
scipy.ndimage.convolve
它在n维空间中进行。
11
虽然其他回答提到了 scipy.signal.convolve2d
作为一个类似的工具,但我发现使用 mode='same'
时,结果是有差别的。
在 Matlab 的 conv2
中,处理图像时会在底部和右侧出现一些不自然的痕迹,而 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)
6
看起来你需要的是 scipy.signal.convolve2d 这个东西。