You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by md...@apache.org on 2003/06/04 04:22:48 UTC
cvs commit: jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat StoreUnivariate.java AbstractStoreUnivariate.java
mdiggory 2003/06/03 19:22:48
Modified: math/src/java/org/apache/commons/math/stat
StoreUnivariate.java AbstractStoreUnivariate.java
Log:
PR: http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20377
Submitted by: Phil Steitz
Revision Changes Path
1.2 +31 -1 jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/StoreUnivariate.java
Index: StoreUnivariate.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/StoreUnivariate.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- StoreUnivariate.java 29 May 2003 20:35:45 -0000 1.1
+++ StoreUnivariate.java 4 Jun 2003 02:22:48 -0000 1.2
@@ -113,12 +113,24 @@
/**
* Returns the current set of values in an array of double primitives.
- * The order of addition is preserved
+ * The order of addition is preserved. The returned array is a fresh
+ * copy of the underlying data -- i.e., it is not a reference to the
+ * stored data.
*
* @return returns the current set of numbers in the order in which they
* were added to this set
*/
public abstract double[] getValues();
+
+ /**
+ * Returns the current set of values in an array of double primitives,
+ * sorted in ascending order. The returned array is a fresh
+ * copy of the underlying data -- i.e., it is not a reference to the
+ * stored data.
+ *
+ * @return returns the current set of numbers sorted in ascending order
+ */
+ public abstract double[] getSortedValues();
/**
* Returns the element at the specified index
@@ -126,5 +138,23 @@
* @return return the element at the specified index
*/
public abstract double getElement(int index);
+
+ /**
+ * Returns an estimate for the pth percentile of the stored values,
+ * following the interpolation-adjusted defintion presented
+ * <a href="http://www.utdallas.edu/~ammann/stat5311/node8.html">here</a><p>
+ *
+ * <strong>Preconditions</strong>:<ul>
+ * <li><code>0 < p < 100</code> (otherwise an <code>IllegalArgumentException
+ * </code> is thrown)</li>
+ * <li>at least one value must be stored (returns <code>Double.NaN
+ * </code> otherwise)</li>
+ * </ul>
+ *
+ * @param p the requested percentile (scaled from 0 - 100)
+ * @return returns an estimate for the pth percentile of the stored data
+ * values
+ */
+ public abstract double getPercentile(double p);
}
1.2 +61 -0 jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/AbstractStoreUnivariate.java
Index: AbstractStoreUnivariate.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/math/src/java/org/apache/commons/math/stat/AbstractStoreUnivariate.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractStoreUnivariate.java 29 May 2003 20:35:45 -0000 1.1
+++ AbstractStoreUnivariate.java 4 Jun 2003 02:22:48 -0000 1.2
@@ -58,6 +58,7 @@
*
* @author <a href="mailto:tobrien@apache.org">Tim O'Brien</a>
* @author Mark Diggory
+ * @author <a href="mailto:phil@steitz.com">Phil Steitz</a>
*/
public abstract class AbstractStoreUnivariate implements StoreUnivariate {
@@ -290,6 +291,66 @@
accum += Math.pow(getElement(i), 2.0);
}
return accum;
+ }
+
+ /**
+ * Uses <a href="http://www.nist.gov/dads/HTML/shellsort.html">Shell sort
+ * </a>
+ * @see org.apache.commons.math.StoreUnivariate#getSortedValues()
+ *
+ */
+ public double[] getSortedValues() {
+ double[] values = getValues();
+ int n = values.length;
+ int j = n;
+ while (j > 1) {
+ j = j / 2;
+ boolean done = false;
+ while (!done) {
+ done = true;
+ for (int i = 0; i < n - j; i++) {
+ int k = i + j;
+ if (values[i] > values[k]) {
+ double temp = values[i];
+ values[i] = values[k];
+ values[k] = temp;
+ done = false;
+ }
+ }
+ }
+ }
+ return values;
+ }
+
+ /**
+ * Returns an estimate for the pth percentile of the stored values
+ * @see org.apache.commons.math.StoreUnivariate#getPercentile()
+ */
+ public double getPercentile(double p) {
+ if ((p > 100) || (p <= 0)) {
+ throw new IllegalArgumentException("invalid percentile value");
+ }
+ double n = (double) getN();
+ if (n == 0) {
+ return Double.NaN;
+ }
+ if (n == 1) {
+ return getElement(0); // always return single value for n = 1
+ }
+ double pos = p * (n + 1) / 100;
+ double fpos = Math.floor(pos);
+ int intPos = (int) fpos;
+ double d = pos - fpos;
+ double[] sorted = getSortedValues();
+ if (pos < 1) {
+ return sorted[0];
+ }
+ if (pos > n) {
+ return sorted[getN() - 1];
+ }
+ double lower = sorted[intPos - 1];
+ double upper = sorted[intPos];
+ return lower + d * (upper - lower);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org