Вы можете добавить направление к многомерному нормальному распределению, добавив сигма-ковариационную матрицу:
import numpy as np
from scipy.stats import multivariate_normal
mu = [20,20] # center of distribution.
sigma_size_top, sigma_size_bot = np.random.uniform(5, 20, size=2)
cov_max = np.sqrt(sigma_size_top * sigma_size_bot) * 0.9 # Cov max can't be larger than sqrt of the other elements
sigma_cov = np.random.uniform(-cov_max, cov_max)
sigma = np.array([[sigma_size_top, sigma_cov],[sigma_cov, sigma_size_bot]])
и затем передайте ее в multivariate_normal
:
dist = multivariate_normal(mu, sigma)
Поместите это в2D-отображение:
x = np.linspace(0, 40, 41)
y = x.copy()
xx, yy = np.meshgrid(x, y)
pos = np.empty(xx.shape + (2,))
pos[:, :, 0] = xx
pos[:, :, 1] = yy
my_map = dist.pdf(pos)
После этого у вас будет искаженное многомерное нормальное распределение на матрице.Я предлагаю вам масштабировать эту матрицу, так как значения будут маленькими.