2016-08-07 3 views
0

내 친구가 Pythons 패키지 uncertainties으로 데이터를 평가하고 있습니다. 나는 그녀의 통계 집행관이며, 나는 그녀의 코드에서 이상한 결과를 얻었습니다.예상보다 다른 결과를주는 비톤 불확실성의 합

sum(array)sqrt(sum(unumpy.std_devs(array)**2))은 다른 결과를 산출하며, 두 번째는 엔지니어링에서 일반적으로 사용되는 분산 방법입니다.

이제 분산 방법은 오류가이 경우에 제공되지 않은 부분 유도 (테일러 시리즈로 인해)와 비교할 때 적합하다는 것을 알았지 만, uncertainties은 어떻게 처리합니까? 어떻게하면 불확실성이 어떤 식 으로든 재현 될 수 있습니까?

답변

0

이 결과 같은 뭔가가 발생합니다 :이 일을하고 sum(array)의 오류 같아야한다 Variable과 반대 됨) 따라서 값을 저장할뿐만 아니라 값이에 종속 된 모든 변수도 저장합니다.

이제 내 값은 (모든 첫눈 *에서 클리어되지 않은) 완전히 독립적이지, 따라서 sum(array) 또한 this 화학식에 따른 내 공분산 행렬의 비대 각 요소를 고려 (미안 그 문서 독일어로되어 있지만, 영어 Wikipedias formula은 직관적이지 않습니다.) 반면, sqrt(sum(unumpy.std_devs(array)**2))은 분명히 대각선 요소를 추가하지 않습니다.

from uncertainties import covariance_matrix 

sum=0 
for i in range(0,len(array)): 
    for j in range(0,len(array)): 
     sum+=covariancematrix(array)[i][j] 

print(sqrt(sum)) 

그리고 unumpy.std_devs(sum(array))==sqrt(sum)True입니다 : 무엇 불확실성 재현하는

방법입니다.

* 동일한 보간법 (측정)에서 얻은 데이터의 사용으로 인한 상관 관계와 측정 길이가 두 시간의 차이로 계산 되었기 때문에 (그리고 측정이 연속되어 있으므로 시간이 이제 상관됩니다!)

0

표준 오차를 제곱하여 값을 분산시키는 것을 잊었습니다. 로 (때문에 나의 arrayAffineScalarFunc 인에

sqrt(sum(unumpy.std_devs(array)**2)) 

그런 다음

from uncertainties import unumpy 
import random 
import math 

a = [uc.ufloat(random.random(), random.random()) for _ in range(100)] 

sa = unumpy.std_devs(sum(a))  
sb = math.sqrt(sum(unumpy.std_devs(a)**2)) 

print(sa) 
print(sb) 
print(sa == sb) 

5.793714811166615 
5.793714811166615 
True 
+0

나쁘다! 나는 그것을 즉시 바로 잡을 것이다! 그것은 오타 였지만 코드에는 실제로'** 2 '가 있습니다. – Tilman

+0

그렇다면 아무런 문제가 없어야합니다. 명확한 예를 보려면 내 편집을 참조하십시오. – Aguy

+0

나는 마침내 스크린 샷뿐만 아니라 코드도 얻었으며 "오류"를 발견했습니다. 당신의 대답은 내가 그것을 발견하는 것을 도울 수있어서 좋았습니다. (분명히) 어떤 경우에 그럴 수 없다고 생각했기 때문입니다. – Tilman