我想使用 python 提高卷积的性能,并希望对如何最好地提高性能有所了解。
我目前正在使用 scipy 执行卷积,使用的代码有点像下面的代码片段:
import numpy
import scipy
import scipy.signal
import timeit
a=numpy.array ( [ range(1000000) ] )
a.reshape(1000,1000)
filt=numpy.array( [ [ 1, 1, 1 ], [1, -8, 1], [1,1,1] ] )
def convolve():
global a, filt
scipy.signal.convolve2d ( a, filt, mode="same" )
t=timeit.Timer("convolve()", "from __main__ import convolve")
print "%.2f sec/pass" % (10 * t.timeit(number=10)/100)
我正在处理图像数据,使用灰度(0 到 255 之间的整数值),我目前每个卷积得到大约四分之一秒。我的想法是执行以下操作之一:
使用 corepy,最好进行一些优化 使用 icc 和 ikml 重新编译 numpy。使用 python-cuda。
我想知道是否有人对这些方法有任何经验(典型的收益是什么,是否值得花时间),或者是否有人知道更好的库来使用 Numpy 执行卷积。
谢谢!
编辑:
通过使用 Numpy 在 C 中重写 python 循环,加速大约 10 倍。