Python scipy.statsβ函数的替代逆计算
我在scipy.stats中的beta.ppf函数的实现中发现了一个bug。它已经被确认,并被标记为缺陷,在他们的错误报告系统 然而,目前我需要计算beta分布的置信区间,因此我需要beta函数的倒数。因为我不能依赖当前版本的beta.ppf,所以我需要Python的替代版本。最好我不想自己实现这个函数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
有人知道一个可以从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