我想使用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倍。
https://stackoverflow.com/questions/2196693
复制相似问题