【问题标题】:Evaluate PDF of multivariate uniform distribution评估多元均匀分布的 PDF
【发布时间】:2021-08-14 12:18:36
【问题描述】:

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

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, lows, highs):
    return np.all((lows <= x) & (x <= highs)) / np.prod(highs - lows)

【问题讨论】:

  • 如果两个均匀分布是独立的,则您有一个封闭形式的解决方案。更一般地说,在 scipy this 中创建自定义多元分布可能会有所帮助
  • 它返回一个二维向量,因为x = np.zeros(2) 是一个二维向量。我觉得uniform只能用来定义简单的均匀分布。
  • @jasonwong 那你会怎么做?

标签: python numpy scipy distribution


【解决方案1】:

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

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, 1))

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-12
    • 2011-04-11
    • 2011-04-04
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多