quantile() or percentile()
![](https://secure.gravatar.com/avatar/cea9ad4c87aa2f8dd5a958ad536fbb94.jpg?s=120&d=mm&r=g)
There's an ongoing effort to introduce quantile() into numpy. You'd use it just like percentile(), but would input your q value in probability space (0.5 for 50%): https://github.com/numpy/numpy/pull/9213 Since there's a great deal of overlap between these two functions, we'd like to solicit opinions on how to move forward on this. The current thinking is to tolerate the redundancy and keep both, using one as the engine for the other. I'm partial to having quantile because 1.) I prefer probability space, and 2.) I have a PR waiting on quantile(). Best, C
![](https://secure.gravatar.com/avatar/6f1e0a1c41913d3a2cc3cfe6b7260e91.jpg?s=120&d=mm&r=g)
I think that there would be a very good reason to have a separate function if we were to introduce weights to the inputs, similarly to the way that we have mean and average. This would have some (positive) repercussions like making weighted histograms with the Freedman-Diaconis binwidth estimator a possibility. I have had this change on the back-burner for a long time, mainly because I was too lazy to figure out how to include it in the C code. However, I will take a closer look. Regards, -Joe On Fri, Jul 21, 2017 at 5:11 PM, Chun-Wei Yuan <chunwei.yuan@gmail.com> wrote:
![](https://secure.gravatar.com/avatar/cea9ad4c87aa2f8dd5a958ad536fbb94.jpg?s=120&d=mm&r=g)
Just to provide some context, 9213 actually spawned off of this guy: https://github.com/numpy/numpy/pull/9211 which might address the weighted inputs issue Joe brought up. C On Fri, Jul 21, 2017 at 2:21 PM, Joseph Fox-Rabinovitz < jfoxrabinovitz@gmail.com> wrote:
![](https://secure.gravatar.com/avatar/6f1e0a1c41913d3a2cc3cfe6b7260e91.jpg?s=120&d=mm&r=g)
While #9211 is a good start, it is pretty inefficient in terms of the fact that it performs an O(nlogn) sort of the array. It is possible to reduce the time to O(n) by using a similar partitioning algorithm to the one in the C code of percentile. I will look into it as soon as I can. -Joe On Fri, Jul 21, 2017 at 5:34 PM, Chun-Wei Yuan <chunwei.yuan@gmail.com> wrote:
![](https://secure.gravatar.com/avatar/6f1e0a1c41913d3a2cc3cfe6b7260e91.jpg?s=120&d=mm&r=g)
Not that I know of. The algorithm is very simple, requiring a relatively small addition to the current introselect algorithm used for `np.partition`. My biggest hurdle is figuring out how the calling machinery really works so that I can figure out which input type permutations I need to generate, and how to get the right backend running for a given function call. -Joe On Thu, Aug 3, 2017 at 1:00 PM, Chun-Wei Yuan <chunwei.yuan@gmail.com> wrote:
![](https://secure.gravatar.com/avatar/cea9ad4c87aa2f8dd5a958ad536fbb94.jpg?s=120&d=mm&r=g)
Cool. Just as a heads up, for my algorithm to work, I actually need the indices, which is why argsort() is so important to me. I use it to get both ap_sorted and ws_sorted variables. If your weighted-quantile algo is faster and doesn't require those indices, please by all means change my implementation. Thanks. On Thu, Aug 3, 2017 at 11:10 AM, Joseph Fox-Rabinovitz < jfoxrabinovitz@gmail.com> wrote:
![](https://secure.gravatar.com/avatar/209654202cde8ec709dee0a4d23c717d.jpg?s=120&d=mm&r=g)
Let’s try and keep this on topic - most replies to this message has been about #9211, which is an orthogonal issue. There are two main questions here: 1. Would the community prefer to use np.quantile(x, 0.25) instead of np.percentile(x, 25), if they had the choice 2. Is this desirable enough to justify increasing the API surface? The general consensus on the github issue answers yes to 1, but is neutral on 2. It would be good to get more opinions. Eric On Fri, 21 Jul 2017 at 16:12 Chun-Wei Yuan chunwei.yuan@gmail.com <http://mailto:chunwei.yuan@gmail.com> wrote: There's an ongoing effort to introduce quantile() into numpy. You'd use it
![](https://secure.gravatar.com/avatar/5dde29b54a3f1b76b2541d0a4a9b232c.jpg?s=120&d=mm&r=g)
+1 on quantile() -CHB On Sun, Aug 13, 2017 at 6:28 AM, Charles R Harris <charlesr.harris@gmail.com
wrote:
-- Christopher Barker, Ph.D. Oceanographer Emergency Response Division NOAA/NOS/OR&R (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception Chris.Barker@noaa.gov
![](https://secure.gravatar.com/avatar/6f1e0a1c41913d3a2cc3cfe6b7260e91.jpg?s=120&d=mm&r=g)
I think that there would be a very good reason to have a separate function if we were to introduce weights to the inputs, similarly to the way that we have mean and average. This would have some (positive) repercussions like making weighted histograms with the Freedman-Diaconis binwidth estimator a possibility. I have had this change on the back-burner for a long time, mainly because I was too lazy to figure out how to include it in the C code. However, I will take a closer look. Regards, -Joe On Fri, Jul 21, 2017 at 5:11 PM, Chun-Wei Yuan <chunwei.yuan@gmail.com> wrote:
![](https://secure.gravatar.com/avatar/cea9ad4c87aa2f8dd5a958ad536fbb94.jpg?s=120&d=mm&r=g)
Just to provide some context, 9213 actually spawned off of this guy: https://github.com/numpy/numpy/pull/9211 which might address the weighted inputs issue Joe brought up. C On Fri, Jul 21, 2017 at 2:21 PM, Joseph Fox-Rabinovitz < jfoxrabinovitz@gmail.com> wrote:
![](https://secure.gravatar.com/avatar/6f1e0a1c41913d3a2cc3cfe6b7260e91.jpg?s=120&d=mm&r=g)
While #9211 is a good start, it is pretty inefficient in terms of the fact that it performs an O(nlogn) sort of the array. It is possible to reduce the time to O(n) by using a similar partitioning algorithm to the one in the C code of percentile. I will look into it as soon as I can. -Joe On Fri, Jul 21, 2017 at 5:34 PM, Chun-Wei Yuan <chunwei.yuan@gmail.com> wrote:
![](https://secure.gravatar.com/avatar/6f1e0a1c41913d3a2cc3cfe6b7260e91.jpg?s=120&d=mm&r=g)
Not that I know of. The algorithm is very simple, requiring a relatively small addition to the current introselect algorithm used for `np.partition`. My biggest hurdle is figuring out how the calling machinery really works so that I can figure out which input type permutations I need to generate, and how to get the right backend running for a given function call. -Joe On Thu, Aug 3, 2017 at 1:00 PM, Chun-Wei Yuan <chunwei.yuan@gmail.com> wrote:
![](https://secure.gravatar.com/avatar/cea9ad4c87aa2f8dd5a958ad536fbb94.jpg?s=120&d=mm&r=g)
Cool. Just as a heads up, for my algorithm to work, I actually need the indices, which is why argsort() is so important to me. I use it to get both ap_sorted and ws_sorted variables. If your weighted-quantile algo is faster and doesn't require those indices, please by all means change my implementation. Thanks. On Thu, Aug 3, 2017 at 11:10 AM, Joseph Fox-Rabinovitz < jfoxrabinovitz@gmail.com> wrote:
![](https://secure.gravatar.com/avatar/209654202cde8ec709dee0a4d23c717d.jpg?s=120&d=mm&r=g)
Let’s try and keep this on topic - most replies to this message has been about #9211, which is an orthogonal issue. There are two main questions here: 1. Would the community prefer to use np.quantile(x, 0.25) instead of np.percentile(x, 25), if they had the choice 2. Is this desirable enough to justify increasing the API surface? The general consensus on the github issue answers yes to 1, but is neutral on 2. It would be good to get more opinions. Eric On Fri, 21 Jul 2017 at 16:12 Chun-Wei Yuan chunwei.yuan@gmail.com <http://mailto:chunwei.yuan@gmail.com> wrote: There's an ongoing effort to introduce quantile() into numpy. You'd use it
![](https://secure.gravatar.com/avatar/5dde29b54a3f1b76b2541d0a4a9b232c.jpg?s=120&d=mm&r=g)
+1 on quantile() -CHB On Sun, Aug 13, 2017 at 6:28 AM, Charles R Harris <charlesr.harris@gmail.com
wrote:
-- Christopher Barker, Ph.D. Oceanographer Emergency Response Division NOAA/NOS/OR&R (206) 526-6959 voice 7600 Sand Point Way NE (206) 526-6329 fax Seattle, WA 98115 (206) 526-6317 main reception Chris.Barker@noaa.gov
participants (7)
-
Charles R Harris
-
Chris Barker
-
Chun-Wei Yuan
-
Eric Wieser
-
josef.pktd@gmail.com
-
Joseph Fox-Rabinovitz
-
Juan Nunez-Iglesias