为了账号安全,请及时绑定邮箱和手机立即绑定

Python 和 Julia 卷积之间的差异?

Python 和 Julia 卷积之间的差异?

慕莱坞森 2021-06-19 09:42:21
我正在尝试将一段代码从 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 函数?
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

您使用的是什么 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):

  File "<stdin>", line 1, in <module>

TypeError: convolve() got an unexpected keyword argument 'axis'


>>> numpy.convolve(conc, conc_filter)

array([  10,  120, 1230, 2305, 5010, 4215, 6420,  640,   60])

您可能需要查看 Python 包的文档,并了解如何使 fft() 类型例程执行您需要的操作。


查看完整回答
反对 回复 2021-06-22
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

对于那些感兴趣的人,我制定了在“常量”模式下使用的填充方案,作为参数传递给 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)-1

padright=floor(Int32,m/2)


conc =append!(zeros(padleft),conc)

conc = append!(conc,zeros(padright))


out = zeros(n)

for i in 1:n

    for j in 1:m

        out[i] += conc[i+j-1]*conc_filter[m-j+1]

    end

end

out

结果:[ 120, 1230, 2305, 5010, 4215, 6420, 640]


查看完整回答
反对 回复 2021-06-22
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

假设我正确理解你的问题:

根据stackexchange 上的这个答案,Julia 示例的向量长度是正确的。

N + M - 1 给出的输出向量长度为 9,如 Julia 的答案所示。

您确定 Python 代码和/或复制的输出正确吗?


查看完整回答
反对 回复 2021-06-22
  • 3 回答
  • 0 关注
  • 242 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号