Generando puntos de x e y correlacionados al azar usando Numpy

Me gustaría generar matrices correlacionadas de coordenadas x e y, para probar varios enfoques de trazado de matplotlib, pero estoy fallando en algún lugar, porque no puedo obtener numpy.random.multivariate_normal para darme las muestras que quiero. Idealmente, quiero que mis valores de x se encuentren entre -0.51 y 51.2, y mis valores de y entre 0.33 y 51.6 (aunque supongo que rangos iguales serían correctos, ya que luego puedo restringir el gráfico), pero no estoy seguro de qué significa ( 0, 0?) Y los valores de covarianza que debería usar para obtener estas muestras de la función.

Como el nombre implica numpy.random.multivariate_normal genera distribuciones normales, esto significa que existe una probabilidad no nula de encontrar puntos fuera de cualquier intervalo dado. Puede generar distribuciones uniformes correlacionadas, pero esto es un poco más complicado. Echa un vistazo aquí para dos métodos posibles.

Si desea seguir con la distribución normal, puede configurar los sigmas para que su intervalo medio corresponda a 3 desviaciones estándar (también puede filtrar los puntos negativos si es necesario). De esta manera, tendrá ~ 99% de sus puntos dentro de su intervalo, por ejemplo:

 import numpy as np from matplotlib.pyplot import scatter xx = np.array([-0.51, 51.2]) yy = np.array([0.33, 51.6]) means = [xx.mean(), yy.mean()] stds = [xx.std() / 3, yy.std() / 3] corr = 0.8 # correlation covs = [[stds[0]**2 , stds[0]*stds[1]*corr], [stds[0]*stds[1]*corr, stds[1]**2]] m = np.random.multivariate_normal(means, covs, 1000).T scatter(m[0], m[1]) 

introduzca la descripción de la imagen aquí