评估多元均匀分布的 PDF

问题描述

我想计算一个点相对于 [-1,1] x [-1,1] 上的均匀分布的密度。我试过这个:

update()

但这会返回一个二维向量而不是标量值。

我能想到的就是

import numpy as np
from scipy.stats import uniform

x = np.zeros(2)
uniform(loc=np.array([-1,-1]),scale=np.array([2,2])).pdf(x)

如果能更快地得到一些东西就好了。就通用功能而言,这是我能做的最好的了。

0.25 * np.all(np.abs(x) <= 2)

解决方法

如果你寻找简单的东西,也许你可以试试这个。您需要微调代码以满足您的需求。

def multivariate_uniform(x,a,b,c,d):
    """
    (a,d) -------- (b,d)
    |               |
    |               |
    |               |
    (a,c) -------- (b,c)
    """
    y = np.array([a,c])
    z = np.array([b,d])
    if (x >= y).all() and (x <= z).all():
        return 1/(b-a)/(d-c)
    else:
        return 0

x1 = np.array([0,0])
print(multivariate_uniform(x1,-1,1,1))

x2 = np.array([2,0])
print(multivariate_uniform(x2,1))

x3 = np.array([0,2])
print(multivariate_uniform(x3,1))

x4 = np.array([-2,2])
print(multivariate_uniform(x4,1))

x5 = np.array([-1,1])
print(multivariate_uniform(x5,1))
0.25
0
0
0
0.25