【发布时间】:2016-05-08 20:17:53
【问题描述】:
我有一个概率密度函数 (pdf) f(x,y)。而要在点 (x,y) 处获得其累积分布函数 (cdf)F(x,y),您需要整合 f(x,y),如下所示:
在Scipy,我可以通过integrate.nquad做到:
x, y=5, 4
F_at_x_y = integrate.nquad(f, [[-inf, x],[-inf, y]])
现在,我需要 x-y 面板中的整个 F(x,y),如下所示:
我该怎么做?
主要问题是,对于从(-30,-30) 到(30,30) 的每一点,我需要从头开始integrate.nquad 来获得F(x,y)。这太慢了。
我想知道,由于结果是连续的(例如,您通过F(4,4) 的值得到F(5,6),并从这两个点之间的区域积分),是否可以加快进程?所以我们不需要在每一点都从头开始integrate,因此可以加快处理速度。
可能有用的链接:
Multivariate Normal CDF in Python using scipy
http://cn.mathworks.com/help/stats/mvncdf.html
我正在考虑借用 斐波那契数列
【问题讨论】:
-
您真的需要多元法线(3 个链接中的 3 个),还是需要一些一般分布?你有没有尝试过简单的
Ffun=lambda x,y:integrate.nquad(f, [[-inf, x],[-inf, y]]); Fvals=[Ffun(x,y) for x,y in zip(xarr,yarr)]并按照你说的做,从x[i-1]到x[i]在一个双循环中集成,并比较两者? -
@AndrasDeak,我需要它来进行一般分发。速度真的很慢,因为我的
pdf之一是kdf(scikit-learn.org/stable/modules/generated/…),就是瓶颈。multivariate normal的 pdf 比这快得多。
标签: python numpy recursion scipy