Chciałbym wygenerować skorelowane tablice współrzędnych x i y, aby przetestować różne podejścia do plotowania matplotlib, ale gdzieś się nie udaje, ponieważ nie mogę uzyskać numpy.random.multivariate_normal
daj mi próbki, które chcę. Idealnie, chcę moje wartości x między -0,51 i 51,2, a moje wartości y pomiędzy 0,33 i 51,6 (chociaż przypuszczam, że równe zakresy byłyby w porządku, ponieważ mogę ograniczyć wykres później), ale nie jestem pewien, co znaczy (0, 0?) I wartości kowariancji, których powinienem użyć, aby pobrać te próbki z funkcji.Generowanie losowo skorelowanych punktów X i Y za pomocą Numpy
11
A
Odpowiedz
20
Jak sama nazwa wskazuje, numpy.random.multivariate_normal
generuje rozkład normalny, co oznacza, że istnieje nie-zerowe prawdopodobieństwo znalezienia punktów poza dowolnym podanym przedziałem. Możesz generować skorelowane rozkłady równomierne, ale to trochę bardziej skomplikowane. Spójrz na here dla dwóch możliwych metod.
Jeśli chcesz przejść z rozkładem normalnym, możesz ustawić sigmy, aby półokres odpowiadał 3 odchyleniom standardowym (w razie potrzeby możesz również odfiltrować złe punkty). W ten sposób będziesz miał ~ 99% swoich punktów wewnątrz przedziału, ex:
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])