質問

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

のdocstringの終わりです。
  

対数正規分布

     

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コンポーネントおよびサービスにアクセスできます。

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

それが役立つはずです...

  • トレバー
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top