Python代码示例优化

2024-05-13 20:10:42 发布

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

我正在查看scipy.stats中Kolmogorov-Smirnov测试的实现,看到了以下代码:

D = np.max([Dplus,Dmin])
if mode == 'asymp':
    return D, distributions.kstwobign.sf(D*np.sqrt(N))
if mode == 'approx':
    pval_two = distributions.kstwobign.sf(D*np.sqrt(N))
    if N > 2666 or pval_two > 0.80 - N*0.3/1000.0 :
        return D, distributions.kstwobign.sf(D*np.sqrt(N))
    else:
        return D, distributions.ksone.sf(D,N)*2

我想最好是这样做:

^{pr2}$

我的实现确实节省了对昂贵的分发生存函数的调用,而且我觉得它也有点清晰。。。在

但我不是Python专家,而且scipy是一个经过深思熟虑的库(至少在我看来是这样)。那么你能解释一下为什么图书馆会这么做吗?在


Tags: 代码returnifmodestatsnpscipysqrt
1条回答
网友
1楼 · 发布于 2024-05-13 20:10:42

My implementation does save a call to the expensive distribution survival function, and I felt is a little clearer as well

不,不会的。distributions.kstwobign.sf(D*np.sqrt(N))只调用一次。看看三个可能的分支。它在任何给定的分支中只执行一次。在

if mode == 'asymp':
    return D, distributions.kstwobign.sf(D*np.sqrt(N))

^{pr2}$

if mode == 'approx':
    pval_two = distributions.kstwobign.sf(D*np.sqrt(N))
    # not the previous if case
    else:
        return D, distributions.ksone.sf(D,N)*2

相关问题 更多 >