numpy 评估沿着直线的2d高斯分布

jdg4fx2g  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(130)

我有一个二维多变量高斯分布,它在某处与一条直线相交。现在我想沿着这条线计算二维高斯分布。如果我没有弄错的话,这应该是一个简单的一维高斯分布,在一个坐标系(我们称之为s)中沿着直线运动?
我该怎么计算呢?具体来说,我正在使用Python/Numpy。一般来说,我正在研究卡尔曼滤波器。
感谢您的任何帮助!

os8fio9y

os8fio9y1#

为了得到二元正态分布的概率密度函数的限制,可以使用它的定义scipy.stats

import numpy as np
from scipy.stats import multivariate_normal as BN
import plotly.graph_objects as go

meanv=[0.5, -0.2]
Sigma=np.array([[1.5, 0.6], [0.6, 1.75]])
rv = BN(meanv, Sigma)
x = np.linspace(meanv[0]-3*np.sqrt(Sigma[0,0]), meanv[0]+3*np.sqrt(Sigma[0,0]), 100)
y= np.linspace(meanv[1]-3*np.sqrt(Sigma[1,1]), meanv[1]+3*np.sqrt(Sigma[1,1]), 100)
xv, yv = np.meshgrid(x,y)
pos = np.dstack((xv, yv))
z= rv.pdf(pos)

fig=go.Figure(go.Surface(x=x, y=y, z=z, colorscale=[[0, '#90ee90'], [1.0, '#90ee90']],
                                                    showscale=False))
X= np.linspace(-2, 2, 150)
Y= 2*X-0.7
Z=rv.pdf(np.dstack((X,Y)))  #Restriction of pdf to the given line
fig.add_scatter3d(x=X, y=Y, z=Z+0.001, mode="lines", line_width=2, line_color="black")
fig.update_layout(width=600, height=500, font_size=11, scene_camera_eye=dict(x=-1.6, y=1.6, z=1))

请注意,必须提供二元正态分布的均值向量及其协方差矩阵Sigma。rv = BN(meanv, Sigma)定义具有给定均值和协方差的分布的随机变量,并且rv.pdf是其概率密度函数。该线被认为包括在平面z=0内,使得它与pdf不非常接近零的域相交。

相关问题