Frage

Ich muß Port einige Funktionen von C # zu Python, aber ich kann nächsten Code rechts nicht implementieren:

[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);
}

Dieser Code verwendet CenterSpace NMath Bibliothek.

Wer kann mir helfen, eine richtige Funktion in Python zu schreiben, die an diesen Code ähnlich sein werden?

Sorry für mein Englisch.

UPD Eigentlich verstehe ich nicht, welche scipy.stats.lognorm.cdf attrs zu C # Wahrscheinlichkeit simillar sind, bedeuten, stddev

Wenn nur bestehende Ordnung zu Python zu kopieren, wie in der Antwort unten, erhalte ich falsche Nummer.

War es hilfreich?

Lösung

Scipy hat eine Reihe von Distributionen im scipy.stats Paket definiert

import scipy.stats

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

Update

Okay, es sieht aus wie Scipy der stat Definitionen etwas Nicht-Standard sind. Hier ist das Ende des docstring für scipy.stats.lognormal

  

Lognormalverteilung

     

lognorm.pdf (x, s) = 1 / (s x sqrt (2 * pi)) * exp (-1 / 2 * (log (x) / s) ** 2 )      für x> 0, s> 0 ist.

     

Wenn log x normalerweise mit einem Mittelwert mu und Varianz Sigma ** 2 verteilt wird,      x ist dann ein, die normalerweise mit Form Paramter Sigma und Skala verteilt      Parameter exp (mu).

Vielleicht versuchen

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

Wenn das immer noch nicht funktioniert, versucht einige Beispiele Punkte bekommen und ich werde sehen, ob ich eine Arbeitsbeziehung finden.

udpate 2

Oops, ich wusste nicht, dass die Skala param ein Schlüsselwort ist. Dieser soll jetzt funktionieren:

import scipy.stats

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

Prost und viel Glück mit Ihrem Projekt!

Andere Tipps

Die Python-Dokumente beschreiben ein Verfahren random.lognormvariate (mu, Sigma):

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

Vielleicht ist das, was Sie wollen.

Vielleicht können Sie verwenden Python.NET (dies ist nicht Ironpython), ermöglicht es .NET-Komponenten und Dienste zuzugreifen:

http://pythonnet.sourceforge.net/

Ivan,

Wir haben kein Interesse daran haben die Leute zu halten in NMath gesperrt. Hier ist, was wir in NMath tun.

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

Dabei steht

private static double Erf( double x )
{
  return ( x < 0.0 ? -StatsFunctions.IncompleteGamma( 0.5, x * x ) : StatsFunctions.IncompleteGamma( 0.5, x * x ) );
}

Das sollte helfen ...

  • Trevor
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top