题
我要港口的一些职能从C#向Python,但我不能实现下一代的权利:
[SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.None)]
public static SqlDouble LogNormDist(double probability, double mean, double stddev)
{
LognormalDistribution lnd = new LognormalDistribution(mean,stddev);
return (SqlDouble)lnd.CDF(probability);
}
这个代码使用CenterSpace Nmath图书馆。
任何人都可以帮我写一权利的功能在蟒蛇,这将类似于这个代码?
对不起,我的英语。
UPD 实际上,我不了解这.统计数据。lognorm.cdf attrs都呈三角C#概率,平均值,标准差
如果只是复制现有的以python,像是在回答下面,我得到了错误的数量。
解决方案
Scipy在scipy.stats包中定义了一堆发行版
import scipy.stats
def LogNormDist(prob, mean=0, stddev=1):
return scipy.stats.lognorm.cdf(prob,stddev,mean)
更新
好吧,看起来Scipy的统计定义有点不标准。这是 scipy.stats.lognormal
对数正态分布
lognorm.pdf(x,s)= 1 /(s x sqrt(2 * pi))* exp(-1 / 2 *(log(x)/ s)** 2 ) 对于x> 0,s> 0
如果log x是正态分布的,则均值μ和方差sigma ** 2, 那么x是对数正态分布的形状参数sigma和scale 参数exp(mu)。
所以也许试试
return scipy.stats.lognorm.cdf(prob,stddev,scipy.exp(mean))
如果仍然无效,请尝试获取一些样本点,我会看看是否可以找到合作关系。
Udpate 2
哎呀,我没有意识到scale param是一个关键字。这个应该现在可以工作:
import scipy.stats
def LogNormDist(prob, mean=0, stddev=1):
return scipy.stats.lognorm.cdf(prob,stddev,scale=scipy.exp(mean))
为您的项目干杯并祝您好运!
其他提示
Python文档描述了一个方法random.lognormvariate(mu,sigma):
http://docs.python.org/library/random.html
也许这就是你想要的。
也许您可以使用Python.NET(这是 NOT IronPython),它允许访问.NET组件和服务:
伊万,
我们有没有兴趣保持人锁入NMath.这是我们在做什么在NMath.
double t = ( Math.Log( x ) - mu_ ) / sigmaRoot2_;
return ( 0.5 + 0.5 * Erf( t ) );
哪里
private static double Erf( double x )
{
return ( x < 0.0 ? -StatsFunctions.IncompleteGamma( 0.5, x * x ) : StatsFunctions.IncompleteGamma( 0.5, x * x ) );
}
这应该有助于...
- 特雷弗