我正在处理液滴分布,为了我的工作,我想创建液滴分布图。在这种情况下,我需要lognorm.pdf
来代替scipy
。不幸的是,scipy
构建函数lognorm.pdf
有这样一个等式:
lognorm.pdf(x, s) = 1 / (s*x*sqrt(2*pi)) * exp(-1/2*(log(x)/s)**2)
就我的情况而言,我想使用维基百科的公式:
pdf = 1 / (s*x*sqrt(2*pi)) * exp(-1/2*((log(x)-mu)/s)**2)
最好的方程式是这样的:
(np.exp(-(np.log10(x) - np.log10(mu))**2 / (2 * np.log10(s)**2)) / ( np.log10(s) * np.sqrt(2 * np.pi)))*N
我确实有一个代码遵循了lest方程,但我只是想知道是否有任何方法可以用scipy
或任何其他python库来实现这一点?
如果x
不太消耗内存,最简单的方法是:
tempX = x / np.exp(mu)
distr = lognorm.pdf(tempX, s)
甚至定义自己的功能:
def lognormMu(x, mu, s):
tempX = x / np.exp(mu)
return lognorm.pdf(tempX, s)
#EDIT
此外,lognorm文档明确指出
上面的概率密度是以"标准化"形式定义的。要移动和/或缩放分布,请使用loc和scale参数。具体地说,
lognorm.pdf(x, s, loc, scale)
是相同的相当于CCD_ 11与CCD_。
所以它似乎应该被称为
distr = lognorm.pdf(x, s, mu)
以获得期望的效果。