Generating random correlated x and y points using Numpy Generating random correlated x and y points using Numpy numpy numpy

Generating random correlated x and y points using Numpy


As the name implies numpy.random.multivariate_normal generates normal distributions, this means that there is a non-null probability of finding points outside of any given interval. You can generate correlated uniform distributions but this a little more convoluted. Take a look here for two possible methods.

If you want to go with the normal distribution you can set up the sigmas so that your half-interval correspond to 3 standard deviations (you can also filter out the bad points if needed). In this way you will have ~99% of your points inside your interval, ex:

import numpy as npfrom matplotlib.pyplot import scatterxx = 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         # correlationcovs = [[stds[0]**2          , stds[0]*stds[1]*corr],         [stds[0]*stds[1]*corr,           stds[1]**2]] m = np.random.multivariate_normal(means, covs, 1000).Tscatter(m[0], m[1])

enter image description here