C# Nmath إلى الثعبان SciPy
سؤال
أنا بحاجة إلى منفذ بعض الوظائف من 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 المكتبة.
أي شخص يمكن أن تساعد لي أن أكتب حق وظيفة في بيثون ، والتي سوف تكون مشابهة هذا الرمز ؟
آسف لغتي الإنجليزية.
محدث في الحقيقة أنا لا أفهم الذي scipy.احصائيات.lognorm.قوات الدفاع المدني attrs هي متشابهة إلى C# احتمال ، يعني ، stddev
إذا كان مجرد نسخ القائمة أجل بيثون ، مثل في الإجابة أدناه ، أحصل على رقم خاطئ.
المحلول
Scipy لديه مجموعة من التوزيعات المحددة في scipy.احصائيات حزمة
import scipy.stats
def LogNormDist(prob, mean=0, stddev=1):
return scipy.stats.lognorm.cdf(prob,stddev,mean)
التحديث
حسنا, يبدو Scipy القانون الأساسي التعاريف قليلا غير قياسي.هنا نهاية docstring على scipy.stats.lognormal
Lognormal التوزيع
lognorm.pdf(س ، ص) = 1/(sxالجذر التربيعي(2*pi)) * exp(-1/2*(log(x)/s)**2) x > 0, s > 0.
إذا سجل x يتم توزيعها بشكل طبيعي مع يعني مو الفرق سيجما**2, ثم x log-توزع عادة مع شكل paramter سيجما الحجم المعلمة exp(مو).
ربما في محاولة
return scipy.stats.lognorm.cdf(prob,stddev,scipy.exp(mean))
إذا كان هذا لا يزال لا يعمل, محاولة الحصول على عينة قليلة نقطة و سوف نرى ما اذا كان يمكنني العثور على علاقة عمل.
Udpate 2
عفوا لم ندرك أن حجم المعلمة هو الكلمة.هذا يجب أن تعمل الآن:
import scipy.stats
def LogNormDist(prob, mean=0, stddev=1):
return scipy.stats.lognorm.cdf(prob,stddev,scale=scipy.exp(mean))
هتافات حظا سعيدا مع المشروع الخاص بك!
نصائح أخرى
الثعبان مستندات تصف طريقة عشوائية.lognormvariate(مو سيجما):
http://docs.python.org/library/random.html
ربما هذا هو ما تريد.
ربما يمكنك استخدام Python.NET (هذا هو لا IronPython) ، فإنه يسمح الوصول .صافي مكونات الخدمات:
إيفان ،
ليس لدينا مصلحة في إبقاء الناس حبيس 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 ) );
}
التي ينبغي أن تساعد...
- تريفور