Dear list; I am honestly not certain whether this, or the SciPy list, is the
appropriate place to post this; please let me know if I got it
wrong. I am convolving a 1D data set containing a relatively narrow peak, with a relatively narrow Gaussian kernel, in order to emulate the effect of atmospheric seeing on astrophysical observations. I have a 1D data array 45 pixels long, and a Gaussian kernel, and run np.convolve(data, kernel, mode='same') on the two arrays, the resulting array's peak is shifted relative to the origin. I have attached a plot to illustrate. The original data is shown in blue. When I convolve it with a symmetric kernel (black), I get an offset resulting peak (magenta). If I flip the kernel -- even though it is perfectly symmetric -- the resulting curve is offset in the opposite direction (yellow). However, if I offset the kernel so it is centered exactly one pixel below the central value, the output array gets centered correct (red), even if I flip the (now no longer symmetric) kernel. This is using Numpy 1.11.3, python 2.7.13, on Anaconda 4.3.0
64-bit on Ubuntu 16.10 Using astropy.convolution, reproduces the correct red curve, so I
can use that for now, but it seems to me this is either a bug or,
if it is indeed the intended behavior, a word of caution would be
merited in the docstring. Cheers, Emil Rivera-Thorsen
_______________________________________________ NumPy-Discussion mailing list [hidden email] https://mail.scipy.org/mailman/listinfo/numpy-discussion Selection_043.png (44K) Download Attachment |
On Wed, Mar 22, 2017 at 10:06 PM, Thøger Emil Rivera-Thorsen <[hidden email]> wrote:
Can you provide an example to replicate? I haven't seen this behavior, it looks centered to me, at least for odd window length.. AFAIR, I had to try a bit in the past for how to set the window and location with even window length. >>> np.__version__ '1.11.2' >>> x = np.linspace(-1, 1, 21) >>> w = stats.norm.pdf(np.linspace(-3, 3, 5)) >>> np.column_stack((x, np.convolve(x, w, mode='same')))[8:13] array([[ -2.00000000e-01, -1.33368234e-01], [ -1.00000000e-01, -6.66841169e-02], [ 0.00000000e+00, 1.51788304e-17], [ 1.00000000e-01, 6.66841169e-02], [ 2.00000000e-01, 1.33368234e-01]]) >>> x = np.abs(np.linspace(-1, 1, 21)) >>> w = stats.norm.pdf(np.linspace(-3, 3, 4)) >>> np.column_stack((x, np.convolve(x, w, mode='same')))[8:13] array([[ 0.2 , 0.12320129], [ 0.1 , 0.07392077], [ 0. , 0.02552663], [ 0.1 , 0.02552663], [ 0.2 , 0.07392077]]) >>> w = stats.norm.pdf(np.linspace(-3, 3, 5)) >>> np.column_stack((x, np.convolve(x, w, mode='same')))[8:13] array([[ 0.2 , 0.13336823], [ 0.1 , 0.06757049], [ 0. , 0.02767626], [ 0.1 , 0.06757049], [ 0.2 , 0.13336823]]) Josef _______________________________________________ NumPy-Discussion mailing list [hidden email] https://mail.scipy.org/mailman/listinfo/numpy-discussion |
OK, this is embarrassing.
I had in fact made the kernel only almost symmetric, it was slightly offset to one side. This caused it. Only a wetware bug. Sorry for having wasted your time! On 03/23/2017 03:38 AM, [hidden email] wrote:
_______________________________________________ NumPy-Discussion mailing list [hidden email] https://mail.scipy.org/mailman/listinfo/numpy-discussion |
Free forum by Nabble | Edit this page |