【发布时间】:2014-03-31 18:32:53
【问题描述】:
我的用例是在所有小于 10 的点上评估 Poisson pmf,我会使用不同的 lambda 多次调用此类函数。无法提前知道 lambda,因此我无法对 lambda 进行矢量化。
我从某个地方听说了一个秘密技巧,那就是使用_pmf。这样做有什么坏处?但是还是有点慢,有没有什么办法可以在不从头重写 C 中的 pmf 的情况下改进它?
%timeit scipy.stats.poisson.pmf(np.arange(0,10),3.3)
%timeit scipy.stats.poisson._pmf(np.arange(0,10),3.3)
a = np.arange(0,10)
%timeit scipy.stats.poisson._pmf(a,3.3)
10000 loops, best of 3: 94.5 µs per loop
100000 loops, best of 3: 15.2 µs per loop
100000 loops, best of 3: 13.7 µs per loop
更新
好吧,我只是懒得用 cython 写。我原以为所有离散分布都有一个更快的解决方案,可以按顺序(迭代地)对连续的x 进行评估。例如。 P(X=3) = P(X=2) * lambda / 3 if X ~ Pois(lambda)
我现在对 Scipy 和 Python 不太信任了。库函数没有我想象的那么先进。
【问题讨论】:
标签: python scipy distribution