سؤال

أنا بحاجة إلى منفذ بعض الوظائف من 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) ، فإنه يسمح الوصول .صافي مكونات الخدمات:

http://pythonnet.sourceforge.net/

إيفان ،

ليس لدينا مصلحة في إبقاء الناس حبيس 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 ) );
}

التي ينبغي أن تساعد...

  • تريفور
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top