commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From er...@apache.org
Subject svn commit: r1067247 - in /commons/proper/math/trunk/src: main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java main/java/org/apache/commons/math/util/MathUtils.java test/java/org/apache/commons/math/util/MathUtilsTest.java
Date Fri, 04 Feb 2011 18:08:30 GMT
Author: erans
Date: Fri Feb  4 18:08:29 2011
New Revision: 1067247

URL: http://svn.apache.org/viewvc?rev=1067247&view=rev
Log:
Bitten again by "Arrays.copyOf".
Added more general methods in "MathUtils".
Replaced call to "Arrays" by the equivalent from "MathUtils".

Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java
    commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java?rev=1067247&r1=1067246&r2=1067247&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java
(original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/CMAESOptimizer.java
Fri Feb  4 18:08:29 2011
@@ -37,6 +37,7 @@ import org.apache.commons.math.optimizat
 import org.apache.commons.math.optimization.RealPointValuePair;
 import org.apache.commons.math.random.MersenneTwister;
 import org.apache.commons.math.random.RandomGenerator;
+import org.apache.commons.math.util.MathUtils;
 
 /**
  * CMA-ES algorithm. This code is translated and adapted from the Matlab version
@@ -386,9 +387,9 @@ public class CMAESOptimizer extends
                 int[] arindex = sortedIndices(fitness);
                 // Calculate new xmean, this is selection and recombination
                 RealMatrix xold = xmean; // for speed up of Eq. (2) and (3)
-                RealMatrix bestArx = selectColumns(arx,Arrays.copyOf(arindex, mu));
+                RealMatrix bestArx = selectColumns(arx, MathUtils.copyOf(arindex, mu));
                 xmean = bestArx.multiply(weights);
-                RealMatrix bestArz = selectColumns(arz,Arrays.copyOf(arindex, mu));
+                RealMatrix bestArz = selectColumns(arz, MathUtils.copyOf(arindex, mu));
                 RealMatrix zmean = bestArz.multiply(weights);
                 boolean hsig = updateEvolutionPaths(zmean, xold);
                 if (diagonalOnly <= 0)
@@ -678,8 +679,8 @@ public class CMAESOptimizer extends
                                           // loss,
                 // prepare vectors, compute negative updating matrix Cneg
                 int[] arReverseIndex = reverse(arindex);
-                RealMatrix arzneg = selectColumns(arz,
-                        Arrays.copyOf(arReverseIndex, mu));
+                RealMatrix arzneg
+                    = selectColumns(arz, MathUtils.copyOf(arReverseIndex, mu));
                 RealMatrix arnorms = sqrt(sumRows(square(arzneg)));
                 int[] idxnorms = sortedIndices(arnorms.getRow(0));
                 RealMatrix arnormsSorted = selectColumns(arnorms, idxnorms);

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java?rev=1067247&r1=1067246&r2=1067247&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java Fri
Feb  4 18:08:29 2011
@@ -2220,9 +2220,31 @@ public final class MathUtils {
      * @return the copied array.
      */
      public static int[] copyOf(int[] source) {
-         final int len = source.length;
+         return copyOf(source, source.length);
+     }
+
+    /**
+     * Creates a copy of the {@code source} array.
+     *
+     * @param source Array to be copied.
+     * @return the copied array.
+     */
+     public static double[] copyOf(double[] source) {
+         return copyOf(source, source.length);
+     }
+
+    /**
+     * Creates a copy of the {@code source} array.
+     *
+     * @param source Array to be copied.
+     * @param len Number of entries to copy. If smaller then the source
+     * length, the copy will be truncated, if larger it will padded with
+     * zeroes.
+     * @return the copied array.
+     */
+    public static int[] copyOf(int[] source, int len) {
          final int[] output = new int[len];
-         System.arraycopy(source, 0, output, 0, len);
+         System.arraycopy(source, 0, output, 0, FastMath.min(len, source.length));
          return output;
      }
 
@@ -2230,12 +2252,14 @@ public final class MathUtils {
      * Creates a copy of the {@code source} array.
      *
      * @param source Array to be copied.
+     * @param len Number of entries to copy. If smaller then the source
+     * length, the copy will be truncated, if larger it will padded with
+     * zeroes.
      * @return the copied array.
      */
-     public static double[] copyOf(double[] source) {
-         final int len = source.length;
+    public static double[] copyOf(double[] source, int len) {
          final double[] output = new double[len];
-         System.arraycopy(source, 0, output, 0, len);
+         System.arraycopy(source, 0, output, 0, FastMath.min(len, source.length));
          return output;
      }
 }

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java?rev=1067247&r1=1067246&r2=1067247&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java
(original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java
Fri Feb  4 18:08:29 2011
@@ -1557,6 +1557,35 @@ public final class MathUtilsTest extends
         }
     }
 
+    public void testCopyOfInt2() {
+        final int[] source = { Integer.MIN_VALUE,
+                               -1, 0, 1, 3, 113, 4769,
+                               Integer.MAX_VALUE };
+        final int offset = 3;
+        final int[] dest = MathUtils.copyOf(source, source.length - offset);
+
+        assertEquals(dest.length, source.length - offset);
+        for (int i = 0; i < source.length - offset; i++) {
+            assertEquals(source[i], dest[i]);
+        }
+    }
+
+    public void testCopyOfInt3() {
+        final int[] source = { Integer.MIN_VALUE,
+                               -1, 0, 1, 3, 113, 4769,
+                               Integer.MAX_VALUE };
+        final int offset = 3;
+        final int[] dest = MathUtils.copyOf(source, source.length + offset);
+
+        assertEquals(dest.length, source.length + offset);
+        for (int i = 0; i < source.length; i++) {
+            assertEquals(source[i], dest[i]);
+        }
+        for (int i = source.length; i < source.length + offset; i++) {
+            assertEquals(0, dest[i], 0);
+        }
+    }
+
     public void testCopyOfDouble() {
         final double[] source = { Double.NEGATIVE_INFINITY,
                                   -Double.MAX_VALUE,
@@ -1573,4 +1602,43 @@ public final class MathUtilsTest extends
             assertEquals(source[i], dest[i], 0);
         }
     }
+
+    public void testCopyOfDouble2() {
+        final double[] source = { Double.NEGATIVE_INFINITY,
+                                  -Double.MAX_VALUE,
+                                  -1, 0,
+                                  Double.MIN_VALUE,
+                                  Math.ulp(1d),
+                                  1, 3, 113, 4769,
+                                  Double.MAX_VALUE,
+                                  Double.POSITIVE_INFINITY };
+        final int offset = 3;
+        final double[] dest = MathUtils.copyOf(source, source.length - offset);
+
+        assertEquals(dest.length, source.length - offset);
+        for (int i = 0; i < source.length - offset; i++) {
+            assertEquals(source[i], dest[i], 0);
+        }
+    }
+
+    public void testCopyOfDouble3() {
+        final double[] source = { Double.NEGATIVE_INFINITY,
+                                  -Double.MAX_VALUE,
+                                  -1, 0,
+                                  Double.MIN_VALUE,
+                                  Math.ulp(1d),
+                                  1, 3, 113, 4769,
+                                  Double.MAX_VALUE,
+                                  Double.POSITIVE_INFINITY };
+        final int offset = 3;
+        final double[] dest = MathUtils.copyOf(source, source.length + offset);
+
+        assertEquals(dest.length, source.length + offset);
+        for (int i = 0; i < source.length; i++) {
+            assertEquals(source[i], dest[i], 0);
+        }
+        for (int i = source.length; i < source.length + offset; i++) {
+            assertEquals(0, dest[i], 0);
+        }
+    }
 }



Mime
View raw message