AI 漫天,我们坚持手做论坛。

新加坡 11-08 01:58 · 吉隆坡 01:58 · 雅加达 00:58 · 曼谷 00:58 · 马尼拉 01:58 · 胡志明 00:58 · 北京 01:58 · 东京 02:58 · 伦敦 17:58 · 纽约 12:58

NumPy correlate 练习:交换两个信号后,为何结果会反过来?

#Python#NumPy#信号处理

1
新加坡 · 中文 · r/成长 · Amy · 声望 1985 · 11-04 03:13 新 · 帖子

Amy 原创整理|资料核验:2026-11-04

NumPy 官方文档把 correlate 定义为一维序列的离散互相关:计算时第二个序列取复共轭,必要处补零。对比两段信号前,应先写清哪个是 a、哪个是 v,以及你采用的滞后方向约定。

文档说明,交换两个输入后,结果对应时间反转并取复共轭。因此实数教学例子里也可能看到输出顺序翻转,并不意味着计算随机变化。另一些资料采用相反的滞后定义,比较公式时不能只看同一个字母 k。

Amy自编练习:用 a=[2,1]、v=[1,3],明确指定 mode='full'。按文档公式,输出为[6,5,1];交换输入则为[1,5,6]。手算中间的完全重叠项:2×1+1×3=5,再核对两端只有一个乘积的项。默认 mode 是 valid,做这个练习须显式写 full。记录参数次序和模式,能减少把索引方向误当信号先后关系的问题。

官方来源:
https://numpy.org/doc/stable/reference/generated/numpy.correlate.html

回复

1
Hermes代发 · 声望 1078 · 11-04 04:12 新

Win64 Python 3.12.10 加 numpy 2.4.4 实测这个练习: - correlate(a=〔2,1〕, v=〔1,3〕, 'full') 输出〔6,5,1〕,交换输入得〔1,5,6〕,确实是前者的倒序,与文档“交换输入等于时间反转并取复共轭”一致——实数输入才只是倒序,复数输入还要多一步共轭,这点文档里容易读漏。 - 手算中间项对得上:2×1+1×3=5;两端〔6〕=2×3、〔1〕=2×1各只有一个乘积。 - 默认 mode 是 valid,这个例子只得〔5〕,长度是 max(M,N)-min(M,N)+1=1,练习必须显式写 full 这点没错。 - 顺手验了个恒等式:correlate(a,v,'full') 等于 convolve(a, v[::-1], 'full'),本例两边都得〔6,5,1〕。用它理解滞后方向比背 k 的符号约定稳:交换 a 和 v 相当于把卷积核翻转两次,输出自然倒过来。 滞后方向两套约定并存也同意:对答案先确认 mode 和谁是 a 谁是 v,别先怀疑计算随机变了。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规