C#n将其命名为Python SciPy

C#n将其命名为Python SciPy,c#,python,scipy,nmath,C#,Python,Scipy,Nmath,我需要将一些函数从C#移植到Python,但我无法正确实现下一个代码: [SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.None)] public static SqlDouble LogNormDist(double probability, double mean, double stddev) { LognormalDistribution lnd = new LognormalDistributio

我需要将一些函数从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库

任何人都可以帮助我用python编写一个正确的函数,它将类似于此代码

对不起我的英语

UPD实际上,我不知道哪个scipy.stats.lognorm.cdf属性与C#probability,mean,stddev相似


如果只是将现有订单复制到python,就像下面的回答一样,我得到了错误的号码。

也许您可以使用python.NET(这不是IronPython),它允许访问.NET组件和服务:


也许您可以使用Python.NET(这不是IronPython),它允许访问.NET组件和服务:


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/(sxsqrt(2*pi))*exp(-1/2*(log(x)/s)**2) 对于x>0,s>0

如果对数x正态分布,平均μ和方差σ**2, 然后x为对数正态分布,形状参数为sigma和scale 参数exp(mu)

所以也许可以试试

return scipy.stats.lognorm.cdf(prob,stddev,scipy.exp(mean))
如果这仍然不起作用,试着获取一些样本点,我会看看我是否能找到工作关系

乌德帕特2 哎呀,我没有意识到scale参数是一个关键字。这一个现在应该可以工作了:

import scipy.stats

def LogNormDist(prob, mean=0, stddev=1):
    return scipy.stats.lognorm.cdf(prob,stddev,scale=scipy.exp(mean))

干杯,祝你的项目好运

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/(sxsqrt(2*pi))*exp(-1/2*(log(x)/s)**2) 对于x>0,s>0

如果对数x正态分布,平均μ和方差σ**2, 然后x为对数正态分布,形状参数为sigma和scale 参数exp(mu)

所以也许可以试试

return scipy.stats.lognorm.cdf(prob,stddev,scipy.exp(mean))
如果这仍然不起作用,试着获取一些样本点,我会看看我是否能找到工作关系

乌德帕特2 哎呀,我没有意识到scale参数是一个关键字。这一个现在应该可以工作了:

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):


也许这就是您想要的。

Python文档描述了一种随机方法。lognormvariate(mu,sigma):

也许这就是你想要的。

伊万

我们对把人锁在NMath里没有兴趣。这是我们在NMath所做的

  double t = ( Math.Log( x ) - mu_ ) / sigmaRoot2_;
  return ( 0.5 + 0.5 * Erf( t ) );
在哪里

专用静态双Erf(双x)
{
返回(x<0.0?-StatsFunctions.IncompleteGamma(0.5,x*x):StatsFunctions.incomplegamma(0.5,x*x));
}
那应该会有帮助

  • 特雷弗
伊万

我们对把人锁在NMath里没有兴趣。这是我们在NMath所做的

  double t = ( Math.Log( x ) - mu_ ) / sigmaRoot2_;
  return ( 0.5 + 0.5 * Erf( t ) );
在哪里

专用静态双Erf(双x)
{
返回(x<0.0?-StatsFunctions.IncompleteGamma(0.5,x*x):StatsFunctions.incomplegamma(0.5,x*x));
}
那应该会有帮助

  • 特雷弗

谢谢,这非常有帮助!谢谢,但这仍然不起作用,所以我用不同的属性运行了C代码,这就是我所拥有的:prob | stddev | mean | result 0.3 | 1.0 | 3.2 | 531431365968782E-06 0.8 | 2.3 | 7.0 124843306096770190.1 | 0.3 1240.1 | 4.1 1246.608; 161232;这对您很有帮助!谢谢,但还是不行,所以我用不同的属性运行了C代码,这就是我所拥有的:prob | stddev | mean | result 0.3 | 1.0 | 3.2 | 531431365968782E-06 0.8 | 2.3 | 7.0 | 0000843306609677019 0.1 | 0.2 | 0.3 | 4.1 | 6.8 1240048604602使用Python自己构建的Python(1612.NET)。它有点不稳定,缺少.NET3.0,而且该项目似乎在相当长的一段时间内处于非活动状态。我不建议将其用于生产代码,但从Python中使用.NET组件非常好。我将Python.NET与Python2.6结合使用(必须自己构建)。它有点不稳定,缺少.NET3.0,而且该项目似乎在相当长的一段时间内处于非活动状态。我不建议将其用于生产代码,但从Python中使用.NET组件非常好。