Functions for finding the relative extrema of numeric data
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. 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 peakfinding functions (in N dimensions, as opposed to 1) may also be useful to the community, and those would definitely belong in scipy. 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
Hi Jacob, On Fri, Sep 9, 2011 at 11:57 PM, Jacob Silterra <jsilter@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 peakfinding 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/peakfindingalgorithmforpython... 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
_______________________________________________ NumPyDiscussion mailing list NumPyDiscussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpydiscussion
On Tue, Sep 13, 2011 at 3:34 PM, Ralf Gommers <ralf.gommers@googlemail.com>wrote:
Hi Jacob,
On Fri, Sep 9, 2011 at 11:57 PM, Jacob Silterra <jsilter@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 peakfinding 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/peakfindingalgorithmforpython...
Cheers, Ralf
Actually, such an algorithm would be great to partner with the watershed clustering implementation in ndimage. Ben Root
participants (3)

Benjamin Root

Jacob Silterra

Ralf Gommers