As far as I have seen, these methods are both implemented as C functions in the respective DLLs, and it appears that the ndimage
version is faster (neither implementation uses parallelized code, like calls to blas or MKL).
Also, when I tried to check that they return the same results by running the following code, the assertion of equality failed. I couldn't figure out from the documentation what exactly the functional differences between the two methods should be (the documentation isn't very clear about what 0
means relative to the location of the kernel's origin either; from examples, I deduced it's in the center, but I might be wrong).
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))
Thanks!