计算高斯概率密度的加速numpy矩阵乘法方法

计算高斯概率密度的加速numpy矩阵乘法方法,numpy,probability,matrix-multiplication,Numpy,Probability,Matrix Multiplication,我想用高维公式中的高斯正态分布计算大量向量的概率密度,现在我有了这个工作- def(self,x): #[1x2][2x2][2x1]==>[1x1] 返回np.exp(-(x.T@self.inv\u cov@x)/2) np.沿_轴应用_(self.f,1,x_m.T) 对应于此框中的公式 这很好,但速度很慢。有没有比沿着轴应用更好的方法来获得相同的结果 我正在寻找一种方法,其中[nx2]x[2x2]x[2xn]=[nx1]n可以变化 我确实找到了解决办法,但它占用了大量内存,nump

我想用高维公式中的高斯正态分布计算大量向量的概率密度,现在我有了这个工作-

def(self,x):
#[1x2][2x2][2x1]==>[1x1]
返回np.exp(-(x.T@self.inv\u cov@x)/2)
np.沿_轴应用_(self.f,1,x_m.T)
对应于此框中的公式


这很好,但速度很慢。有没有比沿着轴应用更好的方法来获得相同的结果

我正在寻找一种方法,其中
[nx2]x[2x2]x[2xn]=[nx1]
n可以变化


我确实找到了解决办法,但它占用了大量内存,numpy只是说这是不可能的


解决方法是从这个计算中只取得到的
[nxn]
矩阵的对角元素
[nx2]x[2x2]x[2xn]

多亏了前面的@hpaulj注释,我能够使用如下批计算-

我的x_m维度是[2xN],经过此修改后,计算变成了@hpaulj所评论的维度-->
[m x 1x2][m x 2x2][m x 2x1]==>[m x 1x1]

np.exp(-np.reformate(x_m.T,(x_m.shape[1,1,2))@
np.重复(np.展开尺寸(self.inv\u cov,轴=0),x\m.形状[1],轴=0)@
np.重塑(x_m.T,(x_m.形状[1],2,1))/2)

沿轴应用
不是速度工具。你的
xum
形状是什么?2d?简单的迭代同样好。但是
@
进行
批处理
计算,能够进行
[mx1x2][mx2x2x2x2][mx2x1x1][mx2x1x1]==>[mx1x1x1x1]
np.einsum
也可以用于此。只是
np.exp((x.T@self.inv\u cov@x)/2)
,没有
沿轴应用?@hpaulj感谢有关批量计算的信息,我让它工作了。我的x_m是[2xn],np.einsum是我最近遇到的东西,我必须研究它@当x是矩阵时,QuangHoang计算指数将得到矩阵(括号内的术语),而需要的是标量或向量。