Jon*_*nny 5 python numpy gaussian
我想在Python中生成高斯分布,x和y维度表示位置,z维度表示某个数量的大小.
分布的最大值为2e6,标准差sigma = 0.025.
在MATLAB中,我可以这样做:
x1 = linspace(-1,1,30);
x2 = linspace(-1,1,30);
mu = [0,0];
Sigma = [.025,.025];
[X1,X2] = meshgrid(x1,x2);
F = mvnpdf([X1(:) X2(:)],mu,Sigma);
F = 314159.153*reshape(F,length(x2),length(x1));
surf(x1,x2,F);
Run Code Online (Sandbox Code Playgroud)
在Python中,到目前为止我所拥有的是:
x = np.linspace(-1,1,30)
y = np.linspace(-1,1,30)
mu = (np.median(x),np.median(y))
sigma = (.025,.025)
Run Code Online (Sandbox Code Playgroud)
有一个Numpy函数numpy.random.multivariate_normal可以和MATLAB的mvnpdf一样,但我很难找到文档.特别是在获得numpy.random.multivariate_normal所需的协方差矩阵时.
从 scipy 0.14 开始,您可以使用 scipy.stats.multivariate_normal.pdf()
import numpy as np
from scipy.stats import multivariate_normal
x, y = np.mgrid[-1.0:1.0:30j, -1.0:1.0:30j]
# Need an (N, 2) array of (x, y) pairs.
xy = np.column_stack([x.flat, y.flat])
mu = np.array([0.0, 0.0])
sigma = np.array([.025, .025])
covariance = np.diag(sigma**2)
z = multivariate_normal.pdf(xy, mean=mu, cov=covariance)
# Reshape back to a (30, 30) grid.
z = z.reshape(x.shape)
Run Code Online (Sandbox Code Playgroud)