python多元正态pdf三维绘图

python多元正态pdf三维绘图,python,Python,我试图显示mnist数据集中多变量正常pdf的全零数字的3d图 from scipy.stats import multivariate_normal import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np my0 = np.mean(num_arrays[0],axis=0) sigma0 = np.identity(784) p0 = multivariate_no

我试图显示mnist数据集中多变量正常pdf的全零数字的3d图

from scipy.stats import multivariate_normal
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

my0 = np.mean(num_arrays[0],axis=0)
sigma0 = np.identity(784)
p0 = multivariate_normal(my0,sigma0)

X, Y = np.mgrid[-10:10:.1, -10:10:.1]
pos = np.empty(X.shape + (2,))
pos[:, :, 0] = X
pos[:, :, 1] = Y
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, p0_id.pdf(pos),cmap='viridis',linewidth=0)
我收到以下错误消息:

operands could not be broadcast together with shapes (200,200,2) (784,)
我做错了什么

编辑:完整错误消息

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-70-584e158fe420> in <module>()
     13 fig = plt.figure()
     14 ax = fig.gca(projection='3d')
---> 15 ax.plot_surface(X, Y, p0.pdf(pos),cmap='viridis',linewidth=0)

~\Anaconda3\lib\site-packages\scipy\stats\_multivariate.py in pdf(self, x)
    608 
    609     def pdf(self, x):
--> 610         return np.exp(self.logpdf(x))
    611 
    612     def rvs(self, size=1, random_state=None):

~\Anaconda3\lib\site-packages\scipy\stats\_multivariate.py in logpdf(self, x)
    604         x = self._dist._process_quantiles(x, self.dim)
    605         out = self._dist._logpdf(x, self.mean, self.cov_info.U,
--> 606                                  self.cov_info.log_pdet, self.cov_info.rank)
    607         return _squeeze_output(out)
    608 

~\Anaconda3\lib\site-packages\scipy\stats\_multivariate.py in _logpdf(self, x, mean, prec_U, log_det_cov, rank)
    452 
    453         """
--> 454         dev = x - mean
    455         maha = np.sum(np.square(np.dot(dev, prec_U)), axis=-1)
    456         return -0.5 * (rank * _LOG_2PI + log_det_cov + maha)

ValueError: operands could not be broadcast together with shapes (200,200,2) (784,) 
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
13图=plt.图()
14 ax=图gca(投影=3d')
--->15最大绘图曲面(X,Y,p0.pdf(pos),cmap='viridis',线宽=0)
pdf格式的~\Anaconda3\lib\site packages\scipy\stats\\u multivariable.py(self,x)
608
609 def pdf(self,x):
-->610返回np.exp(self.logpdf(x))
611
612 def rvs(自身,尺寸=1,随机状态=无):
logpdf中的~\Anaconda3\lib\site packages\scipy\stats\\u multivariable.py(self,x)
604 x=自我距离处理分位数(x,自我尺寸)
605 out=self.\U dist.\U logpdf(x,self.mean,self.cov\U info.U,
-->606 self.cov_info.log_pdet,self.cov_info.rank)
607返回压缩输出(输出)
608
~\Anaconda3\lib\site packages\scipy\stats\\ U multivariable.py in\ U logpdf(self,x,mean,prec\U,log\U det\U cov,rank)
452
453         """
-->454偏差=x-平均值
455 maha=np.和(np.平方(np.点(dev,prec_)),轴=-1)
456返回-0.5*(秩*\u LOG\u 2PI+LOG\u det\u cov+maha)
ValueError:操作数无法与形状(200200,2)(784,)一起广播

我正在尝试做一些相同的事情,我发现唯一对原始形状有想法的方法是计算函数的点到点结果,并使用
Axes3D.scatter()函数绘制该点。
下面是一个如何使用python获得三维高斯形状的示例

import numpy as np
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D
from scipy.stats import multivariate_normal
mean = np.array([1., 1.])
cov_matrix = np.array([[2., 0.], [0., 2.]])
fig = plt.figure()
ax = fig.gca(projection="3d")
x = np.linspace(-3., 3., 20)
y = np.linspace(-3., 3., 20)
for i in x:
    for j in y:
        ax.scatter(i, j, pdf_2d(i, j,  multivariate_normal.pdf([i, j], mean=mean_, cov=cov_matrix_))
plt.show()
由于meshgrid生成多维数组,我认为
pdf()
函数无法对每个元素应用向量变换


不幸的是,在我的例子中,这是唯一能让我了解高斯形状的方法。

你好,Arjan。你能给我们这个错误的完整回溯吗?如果我们能看到它发生在哪一行,我们可能会更容易提供帮助。嘿,我编辑了原始帖子。