alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Java example source code file (MixtureMultivariateNormalDistribution.java)

This example Java source code file (MixtureMultivariateNormalDistribution.java) is included in the alvinalexander.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Learn more about this Java project at its project page.

Java - Java tags/keywords

arraylist, dimensionmismatchexception, list, mixturemultivariatenormaldistribution, mixturemultivariaterealdistribution, multivariatenormaldistribution, notpositiveexception, pair, util

The MixtureMultivariateNormalDistribution.java Java example source code

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.commons.math3.distribution;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.math3.exception.DimensionMismatchException;
import org.apache.commons.math3.exception.NotPositiveException;
import org.apache.commons.math3.random.RandomGenerator;
import org.apache.commons.math3.util.Pair;

/**
 * Multivariate normal mixture distribution.
 * This class is mainly syntactic sugar.
 *
 * @see MixtureMultivariateRealDistribution
 * @since 3.2
 */
public class MixtureMultivariateNormalDistribution
    extends MixtureMultivariateRealDistribution<MultivariateNormalDistribution> {

    /**
     * Creates a multivariate normal mixture distribution.
     * <p>
     * <b>Note: this constructor will implicitly create an instance of
     * {@link org.apache.commons.math3.random.Well19937c Well19937c} as random
     * generator to be used for sampling only (see {@link #sample()} and
     * {@link #sample(int)}). In case no sampling is needed for the created
     * distribution, it is advised to pass {@code null} as random generator via
     * the appropriate constructors to avoid the additional initialisation
     * overhead.
     *
     * @param weights Weights of each component.
     * @param means Mean vector for each component.
     * @param covariances Covariance matrix for each component.
     */
    public MixtureMultivariateNormalDistribution(double[] weights,
                                                 double[][] means,
                                                 double[][][] covariances) {
        super(createComponents(weights, means, covariances));
    }

    /**
     * Creates a mixture model from a list of distributions and their
     * associated weights.
     * <p>
     * <b>Note: this constructor will implicitly create an instance of
     * {@link org.apache.commons.math3.random.Well19937c Well19937c} as random
     * generator to be used for sampling only (see {@link #sample()} and
     * {@link #sample(int)}). In case no sampling is needed for the created
     * distribution, it is advised to pass {@code null} as random generator via
     * the appropriate constructors to avoid the additional initialisation
     * overhead.
     *
     * @param components List of (weight, distribution) pairs from which to sample.
     */
    public MixtureMultivariateNormalDistribution(List<Pair components) {
        super(components);
    }

    /**
     * Creates a mixture model from a list of distributions and their
     * associated weights.
     *
     * @param rng Random number generator.
     * @param components Distributions from which to sample.
     * @throws NotPositiveException if any of the weights is negative.
     * @throws DimensionMismatchException if not all components have the same
     * number of variables.
     */
    public MixtureMultivariateNormalDistribution(RandomGenerator rng,
                                                 List<Pair components)
        throws NotPositiveException, DimensionMismatchException {
        super(rng, components);
    }

    /**
     * @param weights Weights of each component.
     * @param means Mean vector for each component.
     * @param covariances Covariance matrix for each component.
     * @return the list of components.
     */
    private static List<Pair createComponents(double[] weights,
                                                                                       double[][] means,
                                                                                       double[][][] covariances) {
        final List<Pair mvns
            = new ArrayList<Pair(weights.length);

        for (int i = 0; i < weights.length; i++) {
            final MultivariateNormalDistribution dist
                = new MultivariateNormalDistribution(means[i], covariances[i]);

            mvns.add(new Pair<Double, MultivariateNormalDistribution>(weights[i], dist));
        }

        return mvns;
    }
}

Other Java examples (source code examples)

Here is a short list of links related to this Java MixtureMultivariateNormalDistribution.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.