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 の整数値) を使用して画像データを処理していますが、現在、畳み込みあたり約 4 分の 1 秒を取得しています。私の考えは、次のいずれかを行うことでした。
できればいくつかの最適化を行って、corepy を使用してください。icc と iml で numpy を再コンパイルします。python-cuda を使用します。
誰かがこれらのアプローチのいずれかを経験したことがあるかどうか(どのような種類のゲインが典型的であるか、そしてそれが時間の価値があるかどうか)、またはNumpyで畳み込みを実行するためのより良いライブラリを誰かが知っているかどうか疑問に思っていました.
ありがとう!
編集:
Numpy を使用して C で python ループを書き直すことにより、約 10 倍高速化します。