2014-04-21 11 views
2

我想寫會採取錯誤值的列表的功能,並與這些錯誤相關的參數和:舍入誤差爲1和顯著圖並根據錯誤的位數一輪值

  1. 將誤差值舍入爲1位有效數字(按照慣例建立)
  2. 將參數值四捨五入爲出現在其相關錯誤中的位數。

因此,舉例來說,如果我有名單看起來像:

errors = [0.0097, 0.83, 0.05, 0.0045] 
params = [0.0240, 7.85, 0.75, 12.5] 

所產生的名單將這樣的功能後,將看起來像:

errors_r = [0.01, 0.8, 0.05, 0.005] 
params_r = [0.02, 7.9, 0.75, 12.500] 

,其中的誤差第一弧形到1位有效數字,然後將參數舍入到錯誤最終產生的任何位數。

從這個問題下面拍攝的功能How to round a number to significant figures in Python做四捨五入誤差爲1顯著位好工作:

from math import log10, floor 
def round_to_1(x): 
    return round(x, -int(floor(log10(x)))) 

要在params列表舍入值的位數在其關聯的錯誤,我可以使用round()函數並在它們四捨五入後給它提供錯誤中的小數位數,但我不知道如何才能到達該數字。

回答

4

您只需要修改函數以獲取第二個數字,讓它知道將它舍入到哪裏。

def round_to_reference(x, y): 
    return round(x, -int(floor(log10(y)))) 

全部放在一起,你可以做這樣的事情:

errors_r = map(round_to_1, errors) 
params_r = map(round_to_reference, params, errors_r) 

一件事這不會做是正確的號碼尾隨零的打印數量。例如,

>>> round_to_reference(12.5, 0.005) 
12.5 
>>> round_to_reference(12.51234, 0.005) 
12.512 

的數字是正確的舍入,但你需要做別的事情把它們變成正確數量的顯著數字串。

+0

這是一個很好的答案,對原始功能的簡單修改就像一個魅力。尾隨零不是必需的,所以沒關係。謝謝! – Gabriel