Я хотел бы создать коррелированные массивы координат x и y, чтобы протестировать различные подходы построения matplotlib, но я где-то сбой, потому что я не могу получить numpy.random.multivariate_normal
чтобы дать мне образцы, которые я хочу. В идеале, я хочу, чтобы мои значения x между -0.51 и 51.2 и мои значения y между 0,33 и 51,6 (хотя, я полагаю, равные диапазоны были бы в порядке, так как я могу ограничить график потом), но я не уверен что означает (0, 0?) и значения ковариации, которые я должен использовать, чтобы получить эти образцы из функции.
Генерация случайных коррелированных точек x и y с использованием Numpy
Ответ 1
Поскольку имя подразумевает numpy.random.multivariate_normal
генерирует нормальные распределения, это означает, что существует numpy.random.multivariate_normal
вероятность нахождения точек вне любого заданного интервала. Вы можете генерировать коррелированные равномерные распределения, но это немного более запутанно. Посмотрите здесь два возможных метода.
Если вы хотите пойти с нормальным распределением, вы можете настроить сигмы, чтобы ваш полуинтервал соответствовал 3 стандартным отклонениям (вы также можете отфильтровать плохие точки, если это необходимо). Таким образом, у вас будет ~ 99% ваших очков внутри вашего интервала, например:
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])