Author: tn Date: Sun Mar 10 21:34:20 2013 New Revision: 1454925 URL: http://svn.apache.org/r1454925 Log: [MATH-942] Add sample(int, T[]) method, add missing since tags.
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteDistribution.java commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteIntegerDistribution.java commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteRealDistribution.java Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteDistribution.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteDistribution.java?rev=1454925&r1=1454924&r2=1454925&view=diff ============================================================================== --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteDistribution.java (original) +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteDistribution.java Sun Mar 10 21:34:20 2013 @@ -16,6 +16,7 @@ */ package org.apache.commons.math3.distribution; +import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; @@ -23,6 +24,7 @@ import org.apache.commons.math3.exceptio import org.apache.commons.math3.exception.MathIllegalArgumentException; import org.apache.commons.math3.exception.NotPositiveException; import org.apache.commons.math3.exception.NotStrictlyPositiveException; +import org.apache.commons.math3.exception.NullArgumentException; import org.apache.commons.math3.exception.util.LocalizedFormats; import org.apache.commons.math3.random.RandomGenerator; import org.apache.commons.math3.random.Well19937c; @@ -35,7 +37,8 @@ import org.apache.commons.math3.util.Pai * @param <T> type of the random variable. * @see <a href="http://en.wikipedia.org/wiki/Probability_distribution#Discrete_probability_distribution">Discrete probability distribution (Wikipedia)</a> * @see <a href="http://mathworld.wolfram.com/DiscreteDistribution.html">Discrete Distribution (MathWorld)</a> - * @version $Id: DiscreteDistribution.java 169 2013-03-08 09:02:38Z wydrych $ + * @version $Id$ + * @since 3.2 */ public class DiscreteDistribution<T> { @@ -194,4 +197,43 @@ public class DiscreteDistribution<T> { } + /** + * Generate a random sample from the distribution. + * <p> + * If the requested samples fit in the specified array, it is returned + * therein. Otherwise, a new array is allocated with the runtime type of + * the specified array and the size of this collection. + * + * @param sampleSize the number of random values to generate. + * @param array the array to populate. + * @return an array representing the random sample. + * @throws NotStrictlyPositiveException if {@code sampleSize} is not positive. + * @throws NullArgumentException if {@code array} is null + */ + public T[] sample(int sampleSize, final T[] array) throws NotStrictlyPositiveException { + if (sampleSize <= 0) { + throw new NotStrictlyPositiveException(LocalizedFormats.NUMBER_OF_SAMPLES, sampleSize); + } + + if (array == null) { + throw new NullArgumentException(LocalizedFormats.INPUT_ARRAY); + } + + T[] out; + if (array.length < sampleSize) { + @SuppressWarnings("unchecked") // safe as both are of type T + final T[] unchecked = (T[]) Array.newInstance(array.getClass().getComponentType(), sampleSize); + out = unchecked; + } else { + out = array; + } + + for (int i = 0; i < sampleSize; i++) { + out[i] = sample(); + } + + return out; + + } + } Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteIntegerDistribution.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteIntegerDistribution.java?rev=1454925&r1=1454924&r2=1454925&view=diff ============================================================================== --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteIntegerDistribution.java (original) +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteIntegerDistribution.java Sun Mar 10 21:34:20 2013 @@ -34,7 +34,8 @@ import org.apache.commons.math3.util.Pai * * @see <a href="http://en.wikipedia.org/wiki/Probability_distribution#Discrete_probability_distribution">Discrete probability distribution (Wikipedia)</a> * @see <a href="http://mathworld.wolfram.com/DiscreteDistribution.html">Discrete Distribution (MathWorld)</a> - * @version $Id: DiscreteIntegerDistribution.java 169 2013-03-08 09:02:38Z wydrych $ + * @version $Id$ + * @since 3.2 */ public class DiscreteIntegerDistribution extends AbstractIntegerDistribution { Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteRealDistribution.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteRealDistribution.java?rev=1454925&r1=1454924&r2=1454925&view=diff ============================================================================== --- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteRealDistribution.java (original) +++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/distribution/DiscreteRealDistribution.java Sun Mar 10 21:34:20 2013 @@ -34,7 +34,8 @@ import org.apache.commons.math3.util.Pai * * @see <a href="http://en.wikipedia.org/wiki/Probability_distribution#Discrete_probability_distribution">Discrete probability distribution (Wikipedia)</a> * @see <a href="http://mathworld.wolfram.com/DiscreteDistribution.html">Discrete Distribution (MathWorld)</a> - * @version $Id: DiscreteRealDistribution.java 169 2013-03-08 09:02:38Z wydrych $ + * @version $Id$ + * @since 3.2 */ public class DiscreteRealDistribution extends AbstractRealDistribution {