2024-09-30 20:39:04 发布
网友
我知道numpy包含一个卷积函数。在
numpy
问题是我需要自己写,我可以用这种形式简单地写出来(类似这样):
for i in range(-1, 2): for j in range(-1, 2): pixel[position1] += pixel[position2]*kernel[position3]
但我需要写一个矢量化的实现,有什么帮助吗?在
谢谢。在
注意:我已经在使用numpy和scipy,但是为了练习,我需要编写自己的函数。在
编写自己的卷积可以提供更快的计算速度,尤其是当你有一个包含大量1和0的小内核时
kernel = array([[0, 1, 0], [1,-4, 1], [0, 1, 0]])
可以写成
这里的优点是只有一次乘法和四次加法运算,而做完整的普通卷积就等于九次乘法和加法。另外,尽管scipy有一个2d卷积,但是numpy本身没有。在
这只是一种基本的方法,有一些方法可以加快速度(例如,使用临时数组或就地计算),而且还必须决定在边界上做什么;尽管通常上面的方法是正确的。在
编写自己的卷积可以提供更快的计算速度,尤其是当你有一个包含大量1和0的小内核时
可以写成
^{pr2}$这里的优点是只有一次乘法和四次加法运算,而做完整的普通卷积就等于九次乘法和加法。另外,尽管scipy有一个2d卷积,但是numpy本身没有。在
这只是一种基本的方法,有一些方法可以加快速度(例如,使用临时数组或就地计算),而且还必须决定在边界上做什么;尽管通常上面的方法是正确的。在
相关问题 更多 >
编程相关推荐