Numpy 不同平均值的测井密度评估`

Numpy 不同平均值的测井密度评估`,numpy,scipy,Numpy,Scipy,我可以通过这样做来计算多元正态分布的对数概率密度 import numpy as np import scipy.stats scipy.stats.multivariate_normal.logpdf([0,0], mean = np.zeros(2), cov = np.eye(2)) 现在,我感兴趣的是评估点[0,0]在各种平均值上的对数密度。这是我试过的 import numpy as np import scipy.stats grid = np.linspace(-2,2,51

我可以通过这样做来计算多元正态分布的对数概率密度

import numpy as np
import scipy.stats

scipy.stats.multivariate_normal.logpdf([0,0], mean = np.zeros(2), cov = np.eye(2))
现在,我感兴趣的是评估点
[0,0]
在各种平均值上的对数密度。这是我试过的

import numpy as np
import scipy.stats

grid = np.linspace(-2,2,51)
x,y = np.meshgrid(grid,grid)
scipy.stats.multivariate_normal.logpdf([0,0], mean = np.stack([x,y], axis = -1), cov = np.eye(2))
这将导致错误:
ValueError:数组“mean”必须是长度为5202的向量。


如何评估多元正态分布在各种
平均值
上的对数密度?

正如您的错误所示
logpdf
正在等待一个1D数组以获得
平均值
参数。
因为你的协方差矩阵是2x2,你应该给他一个2x1数组来表示
均值

如果要计算多个平均值的密度,可以在展平
x
y
后使用for循环,如下所示:

将numpy导入为np
导入scipy.stats
网格=np.linspace(-2,2,51)
x、 y=np.网格网格(网格,网格)
x、 y=x.flatte(),y.flatte()
res=[]
对于范围内的i(len(x)):
x_i,y_i=x[i],y[i]
res.append(scipy.stats.multivariable_normal.logpdf([0,0],mean=[x_i,y_i],cov=np.eye(2)))
您还可以使用列表理解代替for循环:

res=[scipy.stats.multivariable_normal.logpdf([0,0],mean=[x_i,y_i],cov=np.eye(2)),用于范围(len(x))]
要可视化结果,可以使用
matplotlib.pyplot

导入matplotlib.pyplot作为plt
plt.图()
plt.散射(x,y,c=res)
plt.show()
但我看不出在几个平均值上评估多元高斯对数PDF的意义

在多元正态分布的情况下,参数x和平均值m具有对称作用,如指数项中所示:(x-m)^T Sigam^(-1)(x-m)


您所做的工作相当于计算平均值为
[0,0]
的多元高斯函数和协方差为
的眼睛(2)

的对数PDF,因此无法对计算进行矢量化?在贝叶斯分析中,在计算对数后验密度时,对许多平均值上的高斯对数密度进行评估是有用的。在任何情况下,如果无法对计算进行向量化,则可以使用循环进行向量化::
python res=scipy.stats.multivariable\u normal.logpdf(np.stack([x,y],axis=-1),mean=[0,0],cov=np.eye(2))
其中x,y是平均值。正如我前面所说的,因为均值和x具有对称的角色,所以当设置x并更改均值时,它将给出相同的结果。因为如果你把pdf看成是x的函数,或者你把它看成是平均值的函数,那么从R^N到R的最后就是同一个函数。我不知道我是否清楚,让我知道。没有意义。这并不是我所希望的答案,但这也没什么大不了的。谢谢