2017-09-13 171 views
0

我在Python中使用norm.ppf()来计算正态逆累积分布,但是我发现它比Matlab中的norminv()慢得多。如何在Python中高效计算正态逆累积分布函数

for i in range(10000): 
    iri_next = norm.ppf(0.4, loc=0, scale=0.06) 

成本大约在Python 2秒,而在Matlab

for i=1:10000 
    IRI_next=norminv(0.4,0,0.06); 
end 

成本约0.6第二个是有以计算在Python正常逆累积分布的有效方法?

+0

一个小建议是使用python来调用ac函数我不相信python会达到相同的matlabs速度,因为底层引擎在c/C++中完成 – Andrei

+0

为什么调用函数如果返回的值总是相同的10000次? –

+0

你真的在测量'ppf'和'norminv'中的差异,还是仅仅是Python循环和Matlab循环之间的区别?在循环中尝试一些其他操作,甚至可能是“无操作”(即Python中的“pass”)来检查。 –

回答

2

忽视的事实是拥有相同的值调用该函数10000次会给你10000次同样的返回值,可以传递一个数组作为第一个参数,并获得10000个值一下子

scipy.stats.norm.ppf(numpy.full(10000, 0.4), loc=0, scale=0.06) 

在我的机器上0.006秒

+0

这种方式非常快。谢谢! – GFD