我的一位朋友正在用Pythons包uncertainties
評估數據。我是她的統計顧問,我在她的代碼中出現了一個奇怪的結果。總結蟒蛇的不確定性,給出與預期不同的結果
sum(array)
和sqrt(sum(unumpy.std_devs(array)**2))
產生不同的結果,第二個是工程中常用的方差法。
現在,我知道方差法只適用於誤差小於部分導數(因爲泰勒級數)的情況,在這種情況下不會給出誤差,但uncertainties
如何處理?我怎樣才能以任何方式再現不確定性呢?
我的一位朋友正在用Pythons包uncertainties
評估數據。我是她的統計顧問,我在她的代碼中出現了一個奇怪的結果。總結蟒蛇的不確定性,給出與預期不同的結果
sum(array)
和sqrt(sum(unumpy.std_devs(array)**2))
產生不同的結果,第二個是工程中常用的方差法。
現在,我知道方差法只適用於誤差小於部分導數(因爲泰勒級數)的情況,在這種情況下不會給出誤差,但uncertainties
如何處理?我怎樣才能以任何方式再現不確定性呢?
這導致由於我array
作爲一個AffineScalarFunc
(如與Variable
相反),因此它們不僅存儲該值,而且還存儲值取決於的所有變量。現在
,我的值不完全獨立的(這是不明確的,在第一眼*全部),並且因此sum(array)
還考慮根據我的協方差矩陣的非對角線元素到this式(抱歉該物品是德文的,但英文維基百科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
。
*由於使用從相同插值(測量結果)中獲取的數據而導致的相關性,並且因爲測量的長度計算爲兩次差異(並且測量是連續的,所以時間現在是相關的!)
你忘了標出錯誤的方差。這應該工作,並等於sum(array)
錯誤:
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
我的不好!我會馬上改正!這是一個錯字,代碼實際上有一個** 2。 – Tilman
然後應該沒有問題。看我的編輯給出一個明確的例子。 – Aguy
我終於得到了代碼,不僅截圖並發現了「錯誤」。你的答案雖然很好,但我可以幫助我找到它,因爲我認爲這可能是由於(顯然)並非如此。 – Tilman