gpt4 book ai didi

python - scipy.ndimage.filters.convolve 和 scipy.signal.convolve 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 21:26:55 26 4
gpt4 key购买 nike

据我所知,这些方法都在各自的 DLL 中作为 C 函数实现,而且 ndimage 版本似乎更快(两个实现都没有使用并行代码,比如调用 blas或 MKL)。

此外,当我尝试通过运行以下代码检查它们是否返回相同的结果时,相等断言失败了。我无法从文档中弄清楚这两种方法之间的功能差异究竟应该是什么(文档也不是很清楚 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))

谢谢!

最佳答案

这两个函数在处理边界时有不同的约定。要使您的调用在功能上相同,请将参数 origin=-1origin=(-1,-1,-1) 添加到对 convolveim 的调用:

In [46]: a = random.random((100,100,100))

In [47]: b = random.random((10,10,10))

In [48]: c1 = convolveim(a, b, mode='constant', origin=-1)

In [49]: c2 = convolvesig(a, b, mode='same')

In [50]: allclose(c1,c2)
Out[50]: True

仅当 b 的维度是偶数时才移动原点。当它们为奇数时,函数在使用默认 origin=0 时一致:

In [88]: b = random.random((11,11,11))

In [89]: c1 = convolveim(a, b, mode='constant')

In [90]: c2 = convolvesig(a, b, mode='same')

In [91]: allclose(c1,c2)
Out[91]: True

关于python - scipy.ndimage.filters.convolve 和 scipy.signal.convolve 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16895405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com