Python 和 Julia 卷积之间的差异?

我正在尝试将一段代码从 Python 转换为 Julia,但我很难理解以下卷积之间的输出差异:


Python:


conc = [10,100,1000,5,2000,200,20]

conc_filter = [1,2,3]

sp.ndimage.convolve1d(conc, conc_filter,axis=0,mode='constant')

输出:[ 120, 1230, 2305, 5010, 4215, 6420,  640]


朱莉娅:


conc = [10,100,1000,5,2000,200,20]

conc_filter = [1,2,3]

conv(conc,conc_filter)

输出: [10, 120, 1230, 2305, 5010, 4215, 6420,  640, 60]


谁能解释为什么输出长度不同?为了重新创建 Python 输出,我尝试提出一个逻辑公式,该公式将输入/过滤器大小与切片 conv 输出所需的索引范围相关联,并获得相同的结果。然而,我的运气并不好。是否有可以产生相同输出的 Julia 函数?


慕莱坞森
浏览 243回答 3
3回答

UYOU

您使用的是什么 Python 转换例程?这是 Python 的 numpy 卷积:>>> conc = [10,100,1000,5,2000,200,20]>>> conc_filter = [1,2,3]>>> numpy.convolve(conc, conc_filter,axis=0,mode='constant')Traceback (most recent call last):&nbsp; File "<stdin>", line 1, in <module>TypeError: convolve() got an unexpected keyword argument 'axis'>>> numpy.convolve(conc, conc_filter)array([&nbsp; 10,&nbsp; 120, 1230, 2305, 5010, 4215, 6420,&nbsp; 640,&nbsp; &nbsp;60])您可能需要查看 Python 包的文档,并了解如何使 fft() 类型例程执行您需要的操作。

慕勒3428872

对于那些感兴趣的人,我制定了在“常量”模式下使用的填充方案,作为参数传递给 Python 卷积函数。找到输入/输出大小之间关系的困难是由于对称与非对称卷积滤波器的左右填充方式。下面的 Julia 代码似乎与所有测试输入/输出的 Python 等效代码相匹配。conc = [10,100,1000,5,2000,200,20]conc_filter = [1,2,3]n=length(conc)m=length(conc_filter)padleft=ceil(Int32,m/2)-1padright=floor(Int32,m/2)conc =append!(zeros(padleft),conc)conc = append!(conc,zeros(padright))out = zeros(n)for i in 1:n&nbsp; &nbsp; for j in 1:m&nbsp; &nbsp; &nbsp; &nbsp; out[i] += conc[i+j-1]*conc_filter[m-j+1]&nbsp; &nbsp; endendout结果:[ 120, 1230, 2305, 5010, 4215, 6420, 640]

慕码人2483693

假设我正确理解你的问题:根据stackexchange 上的这个答案,Julia 示例的向量长度是正确的。N + M - 1 给出的输出向量长度为 9,如 Julia 的答案所示。您确定 Python 代码和/或复制的输出正确吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python