Подтвердить что ты не робот

Генерация случайных коррелированных точек x и y с использованием Numpy

Я хотел бы создать коррелированные массивы координат x и y, чтобы протестировать различные подходы построения matplotlib, но я где-то сбой, потому что я не могу получить numpy.random.multivariate_normal чтобы дать мне образцы, которые я хочу. В идеале, я хочу, чтобы мои значения x между -0.51 и 51.2 и мои значения y между 0,33 и 51,6 (хотя, я полагаю, равные диапазоны были бы в порядке, так как я могу ограничить график потом), но я не уверен что означает (0, 0?) и значения ковариации, которые я должен использовать, чтобы получить эти образцы из функции.

4b9b3361

Ответ 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])

enter image description here