我要港口的一些职能从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组件和服务:

http://pythonnet.sourceforge.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 ) );
}

这应该有助于...

  • 特雷弗
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top