C#n将其命名为Python SciPy
我需要将一些函数从C#移植到Python,但我无法正确实现下一个代码: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
[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));
}
那应该会有帮助
- 特雷弗
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));
}
那应该会有帮助
- 特雷弗