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

问题描述

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

def f(self,x):
    #               [1x2]     [2x2]    [2x1] ==> [1x1]
    return np.exp(-(x.T @ self.inv_cov @ x) / 2) 

np.apply_along_axis(self.f,1,x_m.T)

与此处框中的公式相对应

enter image description here

虽然可以,但是非常慢。是否有比apply_along_axis更好的方法来获得相同的结果?

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


我确实找到了一种解决方法,但是它占用了巨大的内存,而numpy表示这是不可能的

解决方法是仅从此计算[nxn]获取结果[nx2]x[2x2]x[2xn]矩阵的对角元素

解决方法

多亏了@hpaulj的评论,我能够按如下方式使用批处理计算-

我的x_m维度为[2xN],经过此修改,计算就变成了@hpaulj所评论的-> [admin-new] /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty,will attempt to perform configuration [admin-new] /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ [admin-new] /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh [admin-new] 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf [admin-new] 10-listen-on-ipv6-by-default.sh: error: /etc/nginx/conf.d/default.conf differs from the packaged version [admin-new] /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh [admin-new] /docker-entrypoint.sh: Configuration complete; ready for start up

[m x 1x2][m x 2x2][m x 2x1] ==> [m x 1x1]