You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mi...@apache.org on 2010/12/28 10:03:54 UTC
svn commit: r1053283 - in /commons/proper/math/trunk/src:
main/java/org/apache/commons/math/stat/descriptive/
main/java/org/apache/commons/math/util/
test/java/org/apache/commons/math/util/
Author: mikl
Date: Tue Dec 28 09:03:53 2010
New Revision: 1053283
URL: http://svn.apache.org/viewvc?rev=1053283&view=rev
Log:
Fixes MATH-384
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/descriptive/DescriptiveStatistics.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/DoubleArray.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/ResizableDoubleArray.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/ResizableDoubleArrayTest.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/descriptive/DescriptiveStatistics.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/descriptive/DescriptiveStatistics.java?rev=1053283&r1=1053282&r2=1053283&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/descriptive/DescriptiveStatistics.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/stat/descriptive/DescriptiveStatistics.java Tue Dec 28 09:03:53 2010
@@ -124,6 +124,20 @@ public class DescriptiveStatistics imple
}
/**
+ * Construct a DescriptiveStatistics instance with an infinite window
+ * and the initial data values in double[] initialDoubleArray.
+ * If initialDoubleArray is null, then this constructor corresponds to
+ * DescriptiveStatistics()
+ *
+ * @param initialDoubleArray the initial double[].
+ */
+ public DescriptiveStatistics(double[] initialDoubleArray) {
+ if (initialDoubleArray != null) {
+ eDA = new ResizableDoubleArray(initialDoubleArray);
+ }
+ }
+
+ /**
* Copy constructor. Construct a new DescriptiveStatistics instance that
* is a copy of original.
*
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/DoubleArray.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/DoubleArray.java?rev=1053283&r1=1053282&r2=1053283&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/DoubleArray.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/DoubleArray.java Tue Dec 28 09:03:53 2010
@@ -68,6 +68,13 @@ public interface DoubleArray {
void addElement(double value);
/**
+ * Adds elements to the end of this expandable array
+ *
+ * @param values to be added to end of array
+ */
+ void addElements(double[] values);
+
+ /**
* <p>
* Adds an element to the end of the array and removes the first
* element in the array. Returns the discarded first element.
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/ResizableDoubleArray.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/ResizableDoubleArray.java?rev=1053283&r1=1053282&r2=1053283&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/ResizableDoubleArray.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/ResizableDoubleArray.java Tue Dec 28 09:03:53 2010
@@ -161,6 +161,29 @@ public class ResizableDoubleArray implem
}
/**
+ * Create a ResizableArray from an existing double[] with the
+ * initial capacity and numElements corresponding to the size of
+ * the supplied double[] array. If the supplied array is null, a
+ * new empty array with the default initial capacity will be created.
+ * Other properties take default values:
+ * <ul>
+ * <li><code>initialCapacity = 16</code></li>
+ * <li><code>expansionMode = MULTIPLICATIVE_MODE</code></li>
+ * <li><code>expansionFactor = 2.5</code></li>
+ * <li><code>contractionFactor = 2.0</code></li>
+ * </ul>
+ */
+ public ResizableDoubleArray(double[] initialArray) {
+ if (initialArray == null) {
+ internalArray = new double[initialCapacity];
+ } else {
+ internalArray = initialArray;
+ initialCapacity = initialArray.length;
+ numElements = initialArray.length;
+ }
+ }
+
+ /**
* <p>
* Create a ResizableArray with the specified initial capacity
* and expansion factor. The remaining properties take default
@@ -274,6 +297,20 @@ public class ResizableDoubleArray implem
contract();
}
}
+
+ /**
+ * Adds several element to the end of this expandable array.
+ *
+ * @param values to be added to end of array
+ */
+ public synchronized void addElements(double[] values) {
+ final double[] tempArray = new double[numElements + values.length + 1];
+ System.arraycopy(internalArray, startIndex, tempArray, 0, numElements);
+ System.arraycopy(values, 0, tempArray, numElements, values.length);
+ internalArray = tempArray;
+ startIndex = 0;
+ numElements += values.length;
+ }
/**
* <p>
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/ResizableDoubleArrayTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/ResizableDoubleArrayTest.java?rev=1053283&r1=1053282&r2=1053283&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/ResizableDoubleArrayTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/ResizableDoubleArrayTest.java Tue Dec 28 09:03:53 2010
@@ -59,6 +59,13 @@ public class ResizableDoubleArrayTest ex
} catch (IllegalArgumentException ex) {
// expected
}
+
+ testDa = new ResizableDoubleArray((double[]) null);
+ assertEquals(0, testDa.getNumElements());
+
+ double[] initialArray = new double[] { 0, 1, 2 };
+ testDa = new ResizableDoubleArray(initialArray);
+ assertEquals(3, testDa.getNumElements());
testDa = new ResizableDoubleArray(2, 2.0f);
assertEquals(0, testDa.getNumElements());
@@ -184,6 +191,33 @@ public class ResizableDoubleArrayTest ex
"16 and an expansion factor of 2.0",
1024, ((ResizableDoubleArray) da).getInternalLength());
}
+
+ public void testAddElements() {
+ ResizableDoubleArray testDa = new ResizableDoubleArray();
+
+ // MULTIPLICATIVE_MODE
+ testDa.addElements(new double[] {4, 5, 6});
+ assertEquals(3, testDa.getNumElements(), 0);
+ assertEquals(4, testDa.getElement(0), 0);
+ assertEquals(5, testDa.getElement(1), 0);
+ assertEquals(6, testDa.getElement(2), 0);
+
+ testDa.addElements(new double[] {4, 5, 6});
+ assertEquals(6, testDa.getNumElements());
+
+ // ADDITIVE_MODE (x's are occupied storage locations, 0's are open)
+ testDa = new ResizableDoubleArray(2, 2.0f, 2.5f,
+ ResizableDoubleArray.ADDITIVE_MODE);
+ assertEquals(2, testDa.getInternalLength());
+ testDa.addElements(new double[] { 1d }); // x,0
+ testDa.addElements(new double[] { 2d }); // x,x
+ testDa.addElements(new double[] { 3d }); // x,x,x,0 -- expanded
+ assertEquals(1d, testDa.getElement(0), 0);
+ assertEquals(2d, testDa.getElement(1), 0);
+ assertEquals(3d, testDa.getElement(2), 0);
+ assertEquals(4, testDa.getInternalLength()); // x,x,x,0
+ assertEquals(3, testDa.getNumElements());
+ }
@Override
public void testAddElementRolling() {