我尝试优化这段代码,以离散化正态分布的cdf(n个点,两点之间的delta等于10**c):
import numpy as np
from scipy.stats import norm
def norm_disc(m, s, n, c):
cdf = norm(m, s).cdf
bornes = np.arange(-0.5, n) * 10 ** c
L = np.diff(cdf(bornes))
L[0] += cdf(bornes[0])
L[-1] += 1 - cdf(bornes[-1])
return L
字符串
有没有办法让它更快?
1条答案
按热度按时间f0brbegy1#
通过将
norm.cdf
替换为scipy.special.ndtr
,我观察到了~70的因子。SciPy分布有很多开销,但special.ndtr
只是计算标准正态分布的CDF。我们可以转换输入以获得任何移位/缩放正态分布的正确结果。字符串