【发布时间】:2011-01-12 21:25:42
【问题描述】:
我想使用 python 提高卷积的性能,并希望对如何最好地提高性能有所了解。
我目前正在使用 scipy 执行卷积,使用的代码有点像下面的 sn-p:
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 倍。
【问题讨论】:
标签: python math numpy scipy convolution