Python 是否有来自scipy.stats的'norm'方法的cythonized版本?
我在scipy.stats中讨论了连续RV的主要公共方法: 具体来说,,Python 是否有来自scipy.stats的'norm'方法的cythonized版本?,python,scipy,cython,Python,Scipy,Cython,我在scipy.stats中讨论了连续RV的主要公共方法: 具体来说,, 来自scipy.stats导入规范 然后使用 norm.ppf或norm.pdf 链接: 使用cython是否有机会在norm.ppf()或norm.pdf()上进行速度优化?或者它已经优化了还是不值得用cython包装?您在中检查了代码吗 …/scipy/stats/distributions.py 看起来norm\u pdf最终使用 _norm_pdf_C = math.sqrt(2*pi) _norm_pdf_log
来自scipy.stats导入规范
然后使用
norm.ppf
或norm.pdf
链接:
使用cython是否有机会在norm.ppf()或norm.pdf()上进行速度优化?或者它已经优化了还是不值得用cython包装?您在中检查了代码吗 …/scipy/stats/distributions.py 看起来
norm\u pdf
最终使用
_norm_pdf_C = math.sqrt(2*pi)
_norm_pdf_logC = math.log(_norm_pdf_C)
def _norm_pdf(x):
return exp(-x**2/2.0) / _norm_pdf_C
因为它不涉及通过numpy数组的循环,所以它看起来不像是cython
speedup的主要候选。你会用不同的方式写吗
哎呀,对不起。您询问的函数如下:
def pdf(self,x,*args,**kwds):
args, loc, scale = self._parse_args(*args, **kwds)
x,loc,scale = map(asarray,(x,loc,scale))
args = tuple(map(asarray,args))
x = asarray((x-loc)*1.0/scale)
cond0 = self._argcheck(*args) & (scale > 0)
cond1 = (scale > 0) & (x >= self.a) & (x <= self.b)
cond = cond0 & cond1
output = zeros(shape(cond),'d')
putmask(output,(1-cond0)+np.isnan(x),self.badvalue)
if any(cond):
goodargs = argsreduce(cond, *((x,)+args+(scale,)))
scale, goodargs = goodargs[-1], goodargs[:-1]
place(output,cond,self._pdf(*goodargs) / scale)
if output.ndim == 0:
return output[()]
return output
def pdf(self,x,*args,**kwds):
args,loc,scale=self._parse_args(*args,**kwds)
x、 位置,比例尺=地图(方阵,(x,位置,比例尺))
args=元组(映射(asarray,args))
x=方阵((x-loc)*1.0/刻度)
cond0=自身参数检查(*参数)和(比例>0)
cond1=(scale>0)和(x>=self.a)和(x我所指的代码实际上在scipy 0.15.1的scipy/stats/_distn_基础结构中。因此,scipy.stats的源导入norm
,然后导入norm.ppf()
是该私有模块的第1785-1828行。对于您关于主要候选对象的问题,我会使用libc.math cimport exp、sqrt、log中的,它们是python内置数学的预编译C版本