Ich möchte korrelierte Arrays von X und Y-Koordinaten zu generieren, um verschiedene Matplotlib Plotten Ansätze zu testen, aber ich scheitern irgendwo, weil ich nicht numpy.random.multivariate_normal
zu bekommen Gib mir die Muster, die ich möchte. Im Idealfall möchte ich meine x-Werte zwischen -0,51 und 51,2 und meine y-Werte zwischen 0,33 und 51,6 (obwohl ich gleiche Bereiche in Ordnung wäre, da ich die Handlung später beschränken kann), aber ich bin mir nicht sicher, was (0, 0?) Und Kovarianzwerte, die ich verwenden sollte, um diese Proben von der Funktion zu erhalten.Generieren zufällige korrelierte x und y Punkte mit Numpy
11
A
Antwort
20
Wie der Name impliziert numpy.random.multivariate_normal
generiert normale Verteilungen, bedeutet dies, dass es eine Nicht-Null-Wahrscheinlichkeit gibt, Punkte außerhalb eines gegebenen Intervalls zu finden. Sie können korrelierte gleichförmige Verteilungen erzeugen, aber dies ist ein wenig komplizierter. Werfen Sie einen Blick auf here für zwei mögliche Methoden.
Wenn Sie mit der Normalverteilung arbeiten möchten, können Sie die Sigmas so einrichten, dass Ihr Halbintervall 3 Standardabweichungen entspricht (Sie können die schlechten Punkte bei Bedarf auch herausfiltern). Auf diese Weise müssen Sie ~ 99% der Punkte in Ihrem Intervall, 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])