1

一部の関数を 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# の確率、平均、stddev に似ているかわかりません

以下の回答のように、既存の注文を python にコピーすると、間違った番号が取得されます。

4

4 に答える 4

4

Scipyには、scipy.statsパッケージで定義された多数のディストリビューションがあります

import scipy.stats

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

アップデート

さて、Scipyの統計定義は少し非標準のようです。これがのdocstringの終わりですscipy.stats.lognormal

対数正規分布

lognorm.pdf(x、s)= 1 /(s x sqrt(2 * pi))* exp(-1/2 *(log(x)/ s)** 2)for x> 0、s>0。

logxが平均muと分散sigma**2で正規分布している場合、xは形状パラメーターsigmaと尺度パラメーターexp(mu)で対数正規分布しています。

だから多分試してみてください

return scipy.stats.lognorm.cdf(prob,stddev,scipy.exp(mean))

それでもうまくいかない場合は、いくつかのサンプルポイントを取得してみてください。そうすれば、うまくいく関係を見つけることができるかどうかを確認します。

Udpate 2

おっと、scaleparamがキーワードであることに気づきませんでした。これで動作するはずです:

import scipy.stats

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

あなたのプロジェクトに乾杯と幸運を!

于 2009-04-29T08:39:10.130 に答える
2

Python ドキュメントでは、メソッド random.lognormvariate(mu, sigma) について説明しています。

http://docs.python.org/library/random.html

多分それはあなたが望むものです。

于 2009-04-29T09:46:48.660 に答える
0

たぶんあなたはPython.NET(これはIronPythonではありません)を使うことができます、それは.NETコンポーネントとサービスにアクセスすることを可能にします:

http://pythonnet.sourceforge.net/

于 2009-04-29T08:29:43.023 に答える
0

イワン、

私たちは、人々を 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 ) );
}

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

  • トレバー
于 2013-11-07T22:16:32.703 に答える