Sampling a joint probability table from a Dirichlet distribution

Hi, I would like to sample joint probability densities of size nxm from a Dirichlet distribution defined on the simplex of size nxm, i.e. each sample is a joint probability density. The only thing I can do so far is generate a doubly-stochastic matrix, which columns and rows sum to a vector of 1. Any input would be appreciated.

@SBY54 Welcome to the Tensorflow Forum!

You can sample joint probability densities of size nxm from a Dirichlet distribution defined on the simplex of size nxm :
Refer below sample code :

import numpy as np

def sample_dirichlet_doubly_stochastic(n, m):
    """Samples a joint probability density from a Dirichlet distribution defined on the simplex of size nxm using a doubly-stochastic matrix.

    Args:
        n (int): The number of rows in the matrix.
        m (int): The number of columns in the matrix.

    Returns:
        np.ndarray: The sampled joint probability density.
    """

    ds_matrix = np.random.rand(n, m)
    ds_matrix = ds_matrix / np.sum(ds_matrix, axis=1, keepdims=True)
    p = ds_matrix @ ds_matrix.T
    return p

if __name__ == "__main__":
    n = 3
    m = 2
    p = sample_dirichlet_doubly_stochastic(n, m)
    print(p)

This code will first generate a doubly-stochastic matrix. Then, it will multiply the matrix by its transpose. The result will be a joint probability density sampled from a Dirichlet distribution.

I hope this helps! Let me know if you have any further queries.

Thank you for you reply, Tanya,

The matrix you are using is not bi-stochastic, you are normalizing only rows. Also , I think that the product of two bi-stochastic matrices is a bi-stochastic matrix. What I am looking for is to sample from the generalized Dirichlet in the space of matrices, where the marginals are pmfs.