1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * https://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 /* 19 * This is not the original file distributed by the Apache Software Foundation 20 * It has been modified by the Hipparchus project 21 */ 22 package org.hipparchus.distribution.multivariate; 23 24 import org.hipparchus.distribution.MultivariateRealDistribution; 25 import org.hipparchus.exception.LocalizedCoreFormats; 26 import org.hipparchus.exception.MathIllegalArgumentException; 27 import org.hipparchus.random.RandomGenerator; 28 29 /** 30 * Base class for multivariate probability distributions. 31 */ 32 public abstract class AbstractMultivariateRealDistribution 33 implements MultivariateRealDistribution { 34 /** RNG instance used to generate samples from the distribution. */ 35 protected final RandomGenerator random; 36 /** The number of dimensions or columns in the multivariate distribution. */ 37 private final int dimension; 38 39 /** Simple constructor. 40 * @param rng Random number generator. 41 * @param n Number of dimensions. 42 */ 43 protected AbstractMultivariateRealDistribution(RandomGenerator rng, 44 int n) { 45 random = rng; 46 dimension = n; 47 } 48 49 /** {@inheritDoc} */ 50 @Override 51 public void reseedRandomGenerator(long seed) { 52 random.setSeed(seed); 53 } 54 55 /** {@inheritDoc} */ 56 @Override 57 public int getDimension() { 58 return dimension; 59 } 60 61 /** {@inheritDoc} */ 62 @Override 63 public abstract double[] sample(); 64 65 /** {@inheritDoc} */ 66 @Override 67 public double[][] sample(final int sampleSize) { 68 if (sampleSize <= 0) { 69 throw new MathIllegalArgumentException(LocalizedCoreFormats.NUMBER_OF_SAMPLES, 70 sampleSize); 71 } 72 final double[][] out = new double[sampleSize][dimension]; 73 for (int i = 0; i < sampleSize; i++) { 74 out[i] = sample(); 75 } 76 return out; 77 } 78 }