%pylab inline
Populating the interactive namespace from numpy and matplotlib
from scipy.stats import lognorm, norm
m = .0
s = .5
# marginal CDF and inverse CDF
F = lambda X: lognorm.cdf(X, s, m)
invF = lambda Y: lognorm.ppf(Y, s, m)
x = linspace(0.001, 10, 100)
N = 300
# generate data
A = asarray([[.2, 2], [.5, 1.]])
b = asarray([[.1], [.1]])
Y = rand(2, N)
X = dot(A, invF(Y)) + b
figure(figsize=(8.5, 4))
subplot(1, 2, 1)
plot(X[0], X[1], 'k.')
xlim([0, 6])
ylim([-1, 5])
subplot(1, 2, 2)
# remove skewness
L = cholesky(cov(X))
c = mean(X, 1)[:, None]
Z = dot(L, norm.ppf(F(dot(inv(A), X - b)))) + c
plot(Z[0], Z[1], 'r.')
xlim([0, 6])
ylim([-1, 5])
(-1, 5)