首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否有可能numpy.correlate不遵循给定的公式?

是否有可能numpy.correlate不遵循给定的公式?
EN

Stack Overflow用户
提问于 2012-09-03 17:25:07
回答 1查看 351关注 0票数 1

numpy.correlate命令的文档表明,两个数组的互相关被计算为信号处理的一般定义,其方式如下:

zk = sum_n an * conj(vn+k)

情况似乎并非如此。看上去这种关联被翻转了。这意味着,公式的最后一项中的符号被切换了。

zk = sum_n an *conj(Vn)

或者两个输入向量的顺序不对。给出的公式的一个简单实现是:

代码语言:javascript
代码运行次数:0
运行
复制
x = [1.0, 2.0, 3.0]
y = [0.0, 0.5, 2.0]
y_padded = numpy.append( [0.0, 0.0] , y)
y_padded = numpy.append(y_padded, [0.0, 0.0] )

crosscorr_numpy = numpy.correlate(x, y, mode='full')

crosscorr_self = numpy.zeros(5)
for k in range(5):
    for i in range(3):
        crosscorr_self[k] += x[i] * y_padded[i+k]

print crosscorr_numpy
print crosscorr_self

您可以很容易地看到,得到的向量有错误的顺序。当它没有产生我预期的结果时,我感到非常困惑,并且非常肯定(在与我的同事讨论过之后),这是一个错误。

EN

回答 1

Stack Overflow用户

发布于 2012-09-03 21:12:58

您使用的是哪个版本的NumPy?在我的Debian挤压盒上:

代码语言:javascript
代码运行次数:0
运行
复制
In [1]: import numpy as np

In [2]: np.__version__
Out[2]: '1.4.1'

当我运行你的例子,我得到:

代码语言:javascript
代码运行次数:0
运行
复制
/usr/lib/pymodules/python2.6/numpy/core/numeric.py:677: DeprecationWarning: 
The current behavior of correlate is deprecated for 1.4.0, and will be removed
for NumPy 1.5.0.

The new behavior fits the conventional definition of correlation: inputs are
never swapped, and the second argument is conjugated for complex arrays.
  DeprecationWarning)
[ 2.   4.5  7.   1.5  0. ]
[ 0.   1.5  7.   4.5  2. ]

因此,您可能是正确的(不正确的)行为,但它可能已经修复在新的版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12251953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档