C # Nmath to Python SciPy - PullRequest
       41

C # Nmath to Python SciPy

1 голос
/ 29 апреля 2009

Мне нужно перенести некоторые функции из 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 похожи на C # вероятность, среднее значение, стандартное отклонение

Если просто скопировать существующий заказ в python, как в ответе ниже, я получу неправильный номер.

Ответы [ 4 ]

4 голосов
/ 29 апреля 2009

У Scipy есть несколько дистрибутивов, определенных в пакете scipy.stats

import scipy.stats

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

Обновление

Хорошо, похоже, что определения статистики Сципи немного нестандартны. Вот конец строки документации для scipy.stats.lognormal

Логнормальное распределение

lognorm.pdf (x, s) = 1 / (s x sqrt (2 * pi)) * exp (-1 / 2 * (log (x) / s) ** 2) для x> 0, s> 0.

Если log x обычно распределяется со средним значением mu и сигмой дисперсии ** 2, тогда x логарифмически нормально распределено с сигмой параметра формы и масштабом параметр exp (mu).

Так что, возможно, попробуйте

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))

Ура и удачи в вашем проекте!

2 голосов
/ 29 апреля 2009

Документы Python описывают метод random.lognormvariate (mu, sigma):

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

Может быть, это то, что вы хотите.

0 голосов
/ 08 ноября 2013

Иван

Мы не заинтересованы в том, чтобы люди были заперты в 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 ) );
}

Это должно помочь ...

  • Тревор
0 голосов
/ 29 апреля 2009

Возможно, вы можете использовать Python.NET (это НЕ IronPython), он позволяет получить доступ к компонентам и сервисам .NET:

http://pythonnet.sourceforge.net/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...