[Numpy-discussion] Functions for finding the relative extrema of numeric data
Jonathan Helmus
jjhelmus at gmail.com
Thu Sep 15 11:03:23 EDT 2011
I've written some peak picking functions that work in N dimensions for a
module for looking at NMR data in python,
http://code.google.com/p/nmrglue/. I'd be glad to polish up the code if
people think it would be a useful addition to scipy.ndimage or
scipy.interpolate? The methods are not based on any formal algorithms I
know of, just some fast and relatively simple methods that I found seem
to work decently.
The methods are contained in the peakpick.py and segmentation.py files
in the analysis directory (specifically see the find_all_connected,
find_all_ downward and find_all_thres):
http://code.google.com/p/nmrglue/source/browse/trunk/nmrglue/analysis/peakpick.py
http://code.google.com/p/nmrglue/source/browse/trunk/nmrglue/analysis/segmentation.py
Let me know if there is an interest in including these in scipy or numpy.
-Jonathan Helmus
Jacob Silterra wrote:
> >What is your application?
>
> The most common case is looking at Fourier transforms and identifying
> spectral peaks. I've also analyzed images looking at 1D slices
> (usually very regular data) and looked for peaks there.
>
> That stackoverflow page had a nice link to a comparison of different
> algorithms here: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2631518/.
> That paper is focused on mass-spectrometry data, but the approach
> would generalize to any 1D data set. Unless somebody feels otherwise,
> I'll close this pull request and start working on an implementation of
> peak finding via continuous wavelet transform (the best and most
> computationally intensive approach of those described above).
>
> -Jacob
>
> ------------------------------
>
> Message: 4
> Date: Tue, 13 Sep 2011 22:34:01 +0200
> From: Ralf Gommers <ralf.gommers at googlemail.com
> <mailto:ralf.gommers at googlemail.com>>
> Subject: Re: [Numpy-discussion] Functions for finding the relative
> extrema of numeric data
> To: Discussion of Numerical Python <numpy-discussion at scipy.org
> <mailto:numpy-discussion at scipy.org>>
> Message-ID:
>
> <CABL7CQhxCX0LKFENMW6-4ZSbdieGxz04zbsrnY4bXYVxVL78Dw at mail.gmail.com
> <mailto:CABL7CQhxCX0LKFENMW6-4ZSbdieGxz04zbsrnY4bXYVxVL78Dw at mail.gmail.com>>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Hi Jacob,
>
> On Fri, Sep 9, 2011 at 11:57 PM, Jacob Silterra <jsilter at gmail.com
> <mailto:jsilter at gmail.com>> wrote:
>
> > Hello all,
> >
> > I'd like to see functions for calculating the relative extrema
> in a set of
> > data included in numpy. I use that functionality frequently, and
> always seem
> > to be writing my own version. It seems like this functionality
> would be
> > useful to the community at large, as it's a fairly common operation.
> >
>
> What is your application?
>
> >
> > For numeric data (which is presumably noisy), the definition of
> a relative
> > extrema isn't completely obvious. The implementation I am
> proposing finds a
> > point in an ndarray along an axis which is larger (or smaller)
> than it's
> > `order` nearest neighbors (`order` being an optional parameter,
> default 1).
> > This is likely to find more points than may be desired, which I
> believe is
> > preferable to the alternative. The output is formatted the same as
> > numpy.where.
> >
> > Code available here: https://github.com/numpy/numpy/pull/154
> >
> > I'm not sure whether this belongs in numpy or scipy, that
> question is
> > somewhat debatable. More sophisticated peak-finding functions (in N
> > dimensions, as opposed to 1) may also be useful to the
> community, and those
> > would definitely belong in scipy.
> >
>
> I have the feeling this belongs in scipy. Although if it's just
> these two
> functions I'm not sure where exactly to put them. Looking at the
> functionality, this is quite a simple approach. For any data of
> the type I'm
> usually working with it will not be able to find the right local
> extrema.
> The same is true for your alternative definition below.
>
> A more powerful peak detection function would be a very good
> addition to
> scipy imho (perhaps in scipy.interpolate?). See also
> http://stackoverflow.com/questions/1713335/peak-finding-algorithm-for-python-scipy
>
> Cheers,
> Ralf
>
>
> > An alternative implementation would be to require that function be
> > continuously descending (or ascending) for `order` points, which
> would
> > enforce a minimum width on a peak.
> >
> > -Jacob Silterra
> >
> > _______________________________________________
> > NumPy-Discussion mailing list
> > NumPy-Discussion at scipy.org <mailto:NumPy-Discussion at scipy.org>
> > http://mail.scipy.org/mailman/listinfo/numpy-discussion
> >
> >
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL:
> http://mail.scipy.org/pipermail/numpy-discussion/attachments/20110913/8bb2e1a5/attachment-0001.html
>
> ------------------------------
>
> Message: 5
> Date: Tue, 13 Sep 2011 15:44:03 -0500
> From: Benjamin Root <ben.root at ou.edu <mailto:ben.root at ou.edu>>
> Subject: Re: [Numpy-discussion] Functions for finding the relative
> extrema of numeric data
> To: Discussion of Numerical Python <numpy-discussion at scipy.org
> <mailto:numpy-discussion at scipy.org>>
> Message-ID:
>
> <CANNq6Fk973UWz7+uXWc55p3iRcUam36cUbFC_NUPxqdi0r7+Hg at mail.gmail.com
> <mailto:CANNq6Fk973UWz7%2BuXWc55p3iRcUam36cUbFC_NUPxqdi0r7%2BHg at mail.gmail.com>>
> Content-Type: text/plain; charset="iso-8859-1"
>
> On Tue, Sep 13, 2011 at 3:34 PM, Ralf Gommers
> <ralf.gommers at googlemail.com
> <mailto:ralf.gommers at googlemail.com>>wrote:
>
> > Hi Jacob,
> >
> > On Fri, Sep 9, 2011 at 11:57 PM, Jacob Silterra
> <jsilter at gmail.com <mailto:jsilter at gmail.com>> wrote:
> >
> >> Hello all,
> >>
> >> I'd like to see functions for calculating the relative extrema
> in a set of
> >> data included in numpy. I use that functionality frequently,
> and always seem
> >> to be writing my own version. It seems like this functionality
> would be
> >> useful to the community at large, as it's a fairly common
> operation.
> >>
> >
> > What is your application?
> >
> >>
> >> For numeric data (which is presumably noisy), the definition of
> a relative
> >> extrema isn't completely obvious. The implementation I am
> proposing finds a
> >> point in an ndarray along an axis which is larger (or smaller)
> than it's
> >> `order` nearest neighbors (`order` being an optional parameter,
> default 1).
> >> This is likely to find more points than may be desired, which
> I believe is
> >> preferable to the alternative. The output is formatted the same as
> >> numpy.where.
> >>
> >> Code available here: https://github.com/numpy/numpy/pull/154
> >>
> >> I'm not sure whether this belongs in numpy or scipy, that
> question is
> >> somewhat debatable. More sophisticated peak-finding functions (in N
> >> dimensions, as opposed to 1) may also be useful to the
> community, and those
> >> would definitely belong in scipy.
> >>
> >
> > I have the feeling this belongs in scipy. Although if it's just
> these two
> > functions I'm not sure where exactly to put them. Looking at the
> > functionality, this is quite a simple approach. For any data of
> the type I'm
> > usually working with it will not be able to find the right local
> extrema.
> > The same is true for your alternative definition below.
> >
> > A more powerful peak detection function would be a very good
> addition to
> > scipy imho (perhaps in scipy.interpolate?). See also
> >
> http://stackoverflow.com/questions/1713335/peak-finding-algorithm-for-python-scipy
> >
> > Cheers,
> > Ralf
> >
> >
> Actually, such an algorithm would be great to partner with the
> watershed
> clustering implementation in ndimage.
>
> Ben Root
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
More information about the NumPy-Discussion
mailing list