Saltar al contenido

¿Cómo generar gaussiano 2D con Python?

No olvides que en la informática cualquier problema casi siempere puede tener diversas resoluciones, así que nosotros aquí mostramos lo mejor y más eficiente.

Solución:

si puedes usar numpyhay numpy.random.multivariate_normal(mean, cov[, size]).

Por ejemplo, para obtener 10 000 muestras 2D:

np.random.multivariate_normal(mean, cov, 10000)

dónde mean.shape==(2,) y cov.shape==(2,2).

Me gustaría agregar una aproximación usando funciones exponenciales. Esto genera directamente una matriz 2d que contiene un gaussiano 2d simétrico y móvil.

Debo señalar que encontré este código en los archivos de la lista de correo de Scipy y lo modifiqué un poco.

import numpy as np

def makeGaussian(size, fwhm = 3, center=None):
    """ Make a square gaussian kernel.

    size is the length of a side of the square
    fwhm is full-width-half-maximum, which
    can be thought of as an effective radius.
    """

    x = np.arange(0, size, 1, float)
    y = x[:,np.newaxis]

    if center is None:
        x0 = y0 = size // 2
    else:
        x0 = center[0]
        y0 = center[1]

    return np.exp(-4*np.log(2) * ((x-x0)**2 + (y-y0)**2) / fwhm**2)

Para referencia y mejoras, está alojado como esencia aquí. ¡Las solicitudes de extracción son bienvenidas!

Dado que la distribución gaussiana 2D estándar es solo el producto de dos distribuciones gaussianas 1D, si no hay correlación entre los dos ejes (es decir, la matriz covariante es diagonal), simplemente llame random.gauss dos veces.

def gauss_2d(mu, sigma):
    x = random.gauss(mu, sigma)
    y = random.gauss(mu, sigma)
    return (x, y)

Recuerda algo, que te permitimos valorar este artículo si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *