Python Numpy和Matplotlib中的二元高斯密度函数

Python Numpy和Matplotlib中的二元高斯密度函数,python,numpy,matplotlib,normal-distribution,Python,Numpy,Matplotlib,Normal Distribution,如何使用给定的均值和协方差矩阵在Numpy和Matplotlib中绘制二元高斯密度函数?它可以是曲面图或等高线图。我想要一个通用的解决方案,使用平均向量和协方差矩阵,它不涉及单个sigma mean, cov, n_samples = np.array([0.,0.]), np.array([[1.0,0.5],[0.5,1.0]]), 100 谢谢 @Aso.agile以下是我的尝试: import umpy as np import matplotlib.pyplot as plt me

如何使用给定的均值和协方差矩阵在Numpy和Matplotlib中绘制二元高斯密度函数?它可以是曲面图或等高线图。我想要一个通用的解决方案,使用平均向量和协方差矩阵,它不涉及单个sigma

mean, cov, n_samples = np.array([0.,0.]), np.array([[1.0,0.5],[0.5,1.0]]), 100
谢谢

@Aso.agile

以下是我的尝试:

import umpy as np
import matplotlib.pyplot as plt 
mean, cov, n_samples = np.array([0.,0.]), np.array([[1.0,0.5],[0.5,1.0]]), 100
data=np.random.multivariate_normal(mean,cov,size=n_samples)
pdf = np.zeros(data.shape[0])
cons = 1./((2*np.pi)**(data.shape[1]/2.)*np.linalg.det(cov)**(-0.5))
X, Y = np.meshgrid(data.T[0], data.T[1])
def pdf(point):
  return cons*np.exp(-np.dot(np.dot((point-mean),np.linalg.inv(cov)),(point-mean).T)/2.)
zs = np.array([pdf(np.array(ponit)) for ponit in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
fig = plt.figure()
ax3D = fig.add_subplot(111, projection='3d')
surf = ax3D.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,linewidth=0, antialiased=Fals)
surf.show()
3D曲面图显示了结果,但有点奇怪!。如有任何意见或其他解决方案,我们将不胜感激

我所期望的(和想要的)类似于以下内容:

以下是我的尝试:

import umpy as np
import matplotlib.pyplot as plt 
mean, cov, n_samples = np.array([0.,0.]), np.array([[1.0,0.5],[0.5,1.0]]), 100
data=np.random.multivariate_normal(mean,cov,size=n_samples)
pdf = np.zeros(data.shape[0])
cons = 1./((2*np.pi)**(data.shape[1]/2.)*np.linalg.det(cov)**(-0.5))
X, Y = np.meshgrid(data.T[0], data.T[1])
def pdf(point):
  return cons*np.exp(-np.dot(np.dot((point-mean),np.linalg.inv(cov)),(point-mean).T)/2.)
zs = np.array([pdf(np.array(ponit)) for ponit in zip(np.ravel(X), np.ravel(Y))])
Z = zs.reshape(X.shape)
fig = plt.figure()
ax3D = fig.add_subplot(111, projection='3d')
surf = ax3D.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,linewidth=0, antialiased=Fals)
surf.show()
3D曲面图显示了结果,但有点奇怪!。如有任何意见或其他解决方案,我们将不胜感激


我所期望的(和想要的)是类似于以下内容的:

中有一些内容:好的,Wiki有一个密度公式,matplotlib gallery有一个绘图示例,您具体的问题是什么?一个解决方案是使用mlab和单个SIGMA,即:'code'matplotlib.mlab.bivariate\u normal(X,Y,sigmax=1.0,sigmay=1.0,mux=0.0,muy=0.0,sigmaxy=0.0)@Aso.agileNothing personal,但我看不到你方有适当程度的尝试。在这个阶段,投票结束。@Zhenya,请看下面我的尝试,然后让我发表你的评论。其中有一些内容:好的,Wiki有密度公式,matplotlib图库有一个绘图示例,你的问题具体是什么?一个解决方案是使用mlab和单个SIGMA,即:“代码”matplotlib.mlab.bivariate_normal(X,Y,sigmax=1.0,sigmay=1.0,mux=0.0,muy=0.0,sigmaxy=0.0)@Aso.agileNothing personal,但我看不到你方有适当程度的尝试。在这个阶段,投票结束。@Zhenya,看看下面我的尝试,然后让我发表你的评论。matplotlib不太擅长做3D绘图…matplotlib不太擅长做3D绘图。。。