c# nmath to python 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 라이브러리를 사용합니다.
누구든지 Python에서 올바른 기능을 작성하는 데 도움이 될 수 있습니다.이 코드와 유사할까요?
내 영어로 죄송합니다.
upd 사실, 나는 어떤 scipy.stats.lognorm.cdf attrs가 c# 확률에 대한 simillar, mean, stddev인지 이해하지 못합니다.
아래 답변과 같이 기존 주문을 Python에 복사하면 틀이 있습니다.
해결책
Scipy에는 Scipy.stats 패키지에 정의 된 여러 분포가 있습니다.
import scipy.stats
def LogNormDist(prob, mean=0, stddev=1):
return scipy.stats.lognorm.cdf(prob,stddev,mean)
업데이트
좋아, Scipy의 STAT 정의가 약간 비표준 인 것 같습니다. 다음은 Docstring의 끝입니다 scipy.stats.lognormal
lognormal 분포
lognorm.pdf (x, s) = 1/(s엑스sqrt (2*pi))*exp (-1/2*(log (x)/s) ** 2) x> 0, s> 0.
Log X가 평균 MU 및 분산 시그마 ** 2로 일반적으로 분산되면 X는 모양 매개 변수 Sigma 및 Scale Parameter 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))
프로젝트에 건배와 행운을 빕니다!
다른 팁
Maybe you can use Python.NET (this is NOT IronPython), it allows to access .NET components and services:
Ivan,
We've got no interest in keeping people locked into NMath. Here's what we're doing in NMath.
double t = ( Math.Log( x ) - mu_ ) / sigmaRoot2_;
return ( 0.5 + 0.5 * Erf( t ) );
where
private static double Erf( double x )
{
return ( x < 0.0 ? -StatsFunctions.IncompleteGamma( 0.5, x * x ) : StatsFunctions.IncompleteGamma( 0.5, x * x ) );
}
That should help...
- Trevor