[Numpy-discussion] Bug in numpy.correlate documentation

Bernhard Spinnler Bernhard.Spinnler at gmx.net
Wed Oct 9 14:48:41 EDT 2013


Hi Richard,

Ah, I searched the list but didn't find those posts before…

I can easily imagine that correlation is defined differently in different disciplines. Both ways are correct and it's just a convention or definition. In my field (Digital Communications, Digital Signal Processing) the vast majority uses the convention implemented by the code. Here are a few examples of prominent text books:

- Papoulis, "Probaility, Random Variables, and Stochastic Processes", McGraw-Hill, 2nd ed.
- Benvenuto, Cherubini, "Algorithms for Communications Systems and their Applications", Wiley.
- Carlson, "Communication Systems" 4th ed. 2002, McGraw-Hill.

Last not least, Matlab's xcorr() function behaves exactly like correlate() does right now, see
- http://www.mathworks.de/de/help/signal/ref/xcorr.html

But, as you say, the most important aspect might be, that most people will probably prefer changing the docs instead of changing the code.

Should I file a bug somewhere?

Cheers,
	Bernhard


On 08.10.2013, at 21:10, Richard Hattersley <rhattersley at gmail.com> wrote:

> Hi Bernard,
> 
> Looks like you're on to something - two other people have raised this discrepancy before: https://github.com/numpy/numpy/issues/2588. Unfortunately, when it comes to resolving the discrepancy one of the previous comments takes the opposite view. Namely, that the docstring is correct and the code is wrong.
> 
> Do different domains use different conventions here? Are there some references to back up one stance or another?
> 
> But all else being equal, I'm guessing there'll be far more appetite for updating the documentation than the code.
> 
> Regards,
> Richard Hattersley
> 
> 
> On 7 October 2013 22:09, Bernhard Spinnler <Bernhard.Spinnler at gmx.net> wrote:
> The numpy.correlate documentation says:
> 
>         correlate(a, v) = z[k] = sum_n a[n] * conj(v[n+k])
> 
> In [1]: a = [1, 2]
> 
> In [2]: v = [2, 1j]
> 
> In [3]: z = correlate(a, v, 'full')
> 
> In [4]: z
> Out[4]: array([ 0.-1.j,  2.-2.j,  4.+0.j])
> 
> However, according to the documentation, z should be
> 
>         z[-1] = a[1] * conj(v[0]) = 4.+0.j
>         z[0]  = a[0] * conj(v[0]) + a[1] * conj(v[1]) = 2.-2.j
>         z[1] = a[0] * conj(v[1]) = 0.-1.j
> 
> which is the time reversed version of what correlate() calculates.
> 
> IMHO, the correlate() code is correct. The correct formula in the docs (which is also the correlation formula in standard text books) should be
> 
>         z[k] = sum_n a[n+k] * conj(v[n])
> 
> Cheers,
>         Bernhard
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
> 
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20131009/38b19747/attachment.html>


More information about the NumPy-Discussion mailing list