[ 
https://issues.apache.org/jira/browse/STATISTICS-90?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17936557#comment-17936557
 ] 

Alex Herbert commented on STATISTICS-90:
----------------------------------------

This API change will add a new method to each statistic implementation. Options 
are e.g:
 # ofRange(double[] x, int from, int to)
 # of(double[] x, int from, int to)

 I suggest {{ofRange(x, from, to)}} as the method name to follow the trend of 
the JDK's {{{}Arrays.copyOfRange(x, from, to){}}}.

The change is mostly a lot of boiler plate addition to each implementation to 
loop over only part of the input array rather then the entire array. I've 
completed the conversion for the double[] statistics in a proof-of-concept 
branch in my fork and the changes were mostly straight forward.

One design decision is what to throw when the input range is invalid. There two 
options are:
 # Like 
[Arrays.copyOfRange|https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Arrays.html#copyOfRange(double%5B%5D,int,int)]:
 ArrayIndexOutOfBoundsException - if from < 0 or from > original.length and 
IllegalArgumentException - if from > to
 # Like [Objects.checkFromToIndex (JDK 
9+)|https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Objects.html#checkFromToIndex(int,int,int)]:
 IndexOutOfBoundsException - if the sub-range is out of bounds

I suggest using only the IndexOutOfBoundsException for all range errors. This 
makes it simple to use Objects.checkFromToIndex in the future.

> Support statistic creation using an array range
> -----------------------------------------------
>
>                 Key: STATISTICS-90
>                 URL: https://issues.apache.org/jira/browse/STATISTICS-90
>             Project: Commons Statistics
>          Issue Type: New Feature
>          Components: descriptive
>    Affects Versions: 1.1
>            Reporter: Alex Herbert
>            Priority: Minor
>
> Add support for using part of an array to create statistics:
> {code:java}
> double[] x = ...
> int from = ...
> int to = ...
> Min.ofRange(x, from, to);
> DoubleStatistics.ofRange(EnumSet.of(Statistic.MIN), x, from, to);{code}
> This change should have no impact on performance for full length arrays and 
> improve memory consumption by avoiding array copies on sub-ranges. Results 
> from STATISTICS-89 indicate a non-negligible performance gain for fast 
> computing statistics.
> Note: Support for sub-ranges is present in the Commons Math 
> UnivariateStatistic interface. This change will allow supporting replacement 
> of the Math API with Statistics.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to