Given a covariance matrix, how can I construct a vector of expressions of randomly distributed variables whose covariance matrix is equal to the given one?
EDIT: All variables are normally distributed.
I have an algorithm that gets the covariances correct, but not the variances on the diagonal:
a = *len(r) for x, row in enumerate(cov_matrix(r)): for y, item in enumerate(row): if x > y: continue v = noise(math.sqrt(abs(item))) a[x] += v if item > 0: a[y] += v else: a[y] -= v
I feel like this should be simple ...