私が見た限りでは、これらのメソッドは両方ともそれぞれの DLL で C 関数として実装されており、ndimage
バージョンの方が高速であるように見えます (どちらの実装も blas や MKL の呼び出しなどの並列化されたコードを使用していません)。
また、次のコードを実行して同じ結果が返されることを確認しようとしたところ、同等性のアサーションに失敗しました。ドキュメントからは、2 つの方法の機能上の違いが正確にどうあるべきかを理解できませんでした (ドキュメントは0
、カーネルの原点の位置に関連する意味についても明確ではありません。例から、中心にあると推測しました) 、しかし、私は間違っているかもしれません)。
from numpy import random, allclose
from scipy.ndimage.filters import convolve as convolveim
from scipy.signal import convolve as convolvesig
a = random.random((100, 100, 100))
b = random.random((10,10,10))
conv1 = convolveim(a,b, mode = 'constant')
conv2 = convolvesig(a,b, mode = 'same')
assert(allclose(conv1,conv2))
ありがとう!