Python scipy.statsβ函数的替代逆计算

Python scipy.statsβ函数的替代逆计算,python,scipy,beta,Python,Scipy,Beta,我在scipy.stats中的beta.ppf函数的实现中发现了一个bug。它已经被确认,并被标记为缺陷,在他们的错误报告系统 然而,目前我需要计算beta分布的置信区间,因此我需要beta函数的倒数。因为我不能依赖当前版本的beta.ppf,所以我需要Python的替代版本。最好我不想自己实现这个函数 有人知道一个可以从SIPY.STATS? < P>函数替换BET.PPF函数的函数吗?好的,我使用C++ Boost库创建了一个解决方案,它实现了beta分布的版本。为了使用它,您必须安装boo

我在scipy.stats中的beta.ppf函数的实现中发现了一个bug。它已经被确认,并被标记为缺陷,在他们的错误报告系统

然而,目前我需要计算beta分布的置信区间,因此我需要beta函数的倒数。因为我不能依赖当前版本的beta.ppf,所以我需要Python的替代版本。最好我不想自己实现这个函数


有人知道一个可以从SIPY.STATS?

< P>函数替换BET.PPF函数的函数吗?好的,我使用C++ Boost库创建了一个解决方案,它实现了beta分布的版本。为了使用它,您必须安装boost库并编译它。之后,您可以使用以下代码使用它:

betainv.cpp

#include <boost/python.hpp>
#include <boost/math/distributions/beta.hpp>

using namespace boost::python;

class betainvClass {
    public: double betainv(double p, double a, double b);
};

double betainvClass::betainv(double p, double a, double b) { 
    return boost::math::ibeta_inv(a, b, p);
}

// Expose classes and methods to Python
BOOST_PYTHON_MODULE(betainv) {
    class_<betainvClass> ("create_betainv_instance")
        .def("betainv", &betainvClass::betainv)
    ;
}
Python示例文件:

import betainv

beta = betainv.create_betainv_instance()
print "0.25, 0.0342, 170 -> " + str(beta.betainv(0.25, 0.0342, 170))
print "0.25, 0.0342, 171 -> " + str(beta.betainv(0.25, 0.0342, 171))
print "0.25, 0.0342, 172 -> " + str(beta.betainv(0.25, 0.0342, 172))
顺便说一句,我还有进一步的评论。我做了一个速度测试,并将该方法运行了1000次。首先使用scipy,然后使用boost实现。以下是以毫秒为单位的结果:

required time scipy = 295.145019531
required time c++   = 7.68383789062

Boost C++实现速度大约快42倍。

required time scipy = 295.145019531
required time c++   = 7.68383789062