为什么是scipy.stats.norm.ppf实现如此缓慢?

2024-09-30 05:32:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是scipy版本0.19.0。我看到在scipy\stats_continuous distns下,函数_norm_ppf包装{}。我的问题是,这是用什么实现的?为什么这么慢?在

作为比较, 我在ASA241中创建了一个著名的开源实现的反cdf的c扩展(“R8_NORMAL_01_cdf_inverse”)。您可以通过以下链接查看它的版本:http://people.sc.fsu.edu/~jburkardt/c_src/asa241/asa241.html

一些天真的基准测试显示,scipy的版本几乎慢了1000倍:

import timeit
from scipy.stats import norm
from QSCoreExtensions import r8_normal_01_cdf_inverse # compiled extension

def a():
    norm.ppf(.3456)

def b():
    r8_normal_01_cdf_inverse(.3456)

print(timeit.timeit('a()', number=10000, globals=globals()))
print(timeit.timeit('b()', number=10000, globals=globals()))

输出:

219758156838038

0.0021004953395136194

请注意,任何输入(不仅仅是.3456)都会产生类似的结果。此外,r8_normal_01_cdf_逆精度为10**16的1部分,实际上比scipy.stats.norm.ppf页


Tags: fromimport版本normdefstatsscipynormal

热门问题