我知道有各种优化的现成函数可用于执行2D卷积,但为了理解,我正在尝试实现我自己的2D卷积函数
以下是我目前所做的工作:
convoluted = []
# TODO: Vectorize
for i in range(0, M - m + 1):
for j in range(0, N - n + 1):
submatrix = x[i:i+m, j:j+n]
convoluted.append(np.sum([submatrix*kernel]))
convoluted = np.array(convoluted).reshape(M - m + 1, N - n + 1)
注意x
是输入图像数组,(M, N)
是输入图像的形状,(m, n)
是所用内核的形状
两个显式for循环非常慢。非常慢。
有没有办法将其矢量化?感谢您的帮助
(我知道可以使用python列表理解,至少对于内部循环是这样,但我正在寻找一种更快的方法,如果有的话)
我想你正在寻找这个:
第一行从原始数组创建内核大小的窗口。第二行是简单的乘法和加法(与for循环中的行类似,删除for循环更加优雅)。此代码和您的代码的输出应该是相同的。如果您被设置为不使用其中任何一个,请告诉我们您编辑文章的限制
另一种类似的方法是here,它不使用skimage包(只使用numpy,但代码稍长)
相关问题 更多 >
编程相关推荐