質問
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 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が平均muおよび分散sigma ** 2で正規分布している場合、 その後、xは形状パラメーターシグマとスケールで対数正規分布します パラメーターexp(mu)。
だから試しましょう
return scipy.stats.lognorm.cdf(prob,stddev,scipy.exp(mean))
それでもうまくいかない場合は、いくつかのサンプルポイントを取得してみてください。動作する関係を見つけることができるかどうかを確認します。
Udpate 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)メソッドについて説明しています:
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 ) );
where
private static double Erf( double x )
{
return ( x < 0.0 ? -StatsFunctions.IncompleteGamma( 0.5, x * x ) : StatsFunctions.IncompleteGamma( 0.5, x * x ) );
}
それが役立つはずです...
- トレバー