[Scipy-tickets] [SciPy] #1411: scipy.signal.correlate gives different results than numpy.correlate

SciPy Trac scipy-tickets@scipy....
Sun Mar 20 16:14:46 CDT 2011


#1411: scipy.signal.correlate gives different results than numpy.correlate
--------------------------+-------------------------------------------------
 Reporter:  jpaalasm      |       Owner:  somebody
     Type:  defect        |      Status:  new     
 Priority:  normal        |   Milestone:  0.10.0  
Component:  scipy.signal  |     Version:  0.9.0   
 Keywords:                |  
--------------------------+-------------------------------------------------

Comment(by warren.weckesser):

 The relevant block of code is
 {{{
     if mode == 'valid':
         ps = [i - j + 1 for i, j in zip(in1.shape, in2.shape)]
         out = np.empty(ps, in1.dtype)
         for i in range(len(ps)):
             if ps[i] <= 0:
                 raise ValueError("Dimension of x(%d) < y(%d) " \
                                  "not compatible with valid mode" % \
                                  (in1.shape[i], in2.shape[i]))

         z = sigtools._correlateND(in1, in2, out, val)
 }}}
 The bug is the creation of the array 'out' before checking the values in
 ps.  The quick fix is to move the line "out = np.empty(ps, in1.dtype)" to
 after the loop that checks for negative values in ps.  Then one would get
 the intended error message.

 The bigger question is: why does the first argument have to have more
 elements than the second?  The docstring doesn't say anything about this.
 As pointed out in the description, numpy's correlate() handles either
 order, and so does scipy's correlate if mode='full'.  Shouldn't
 mode='valid' just be the appropriate subset of the 'full' case?

-- 
Ticket URL: <http://projects.scipy.org/scipy/ticket/1411#comment:1>
SciPy <http://www.scipy.org>
SciPy is open-source software for mathematics, science, and engineering.


More information about the Scipy-tickets mailing list