2014-07-07 58 views
1

我執行使用python統計的一點點,我有這樣的數據集:如何將尾隨零保存在列表或np.array中?

test=[0.200,0.220,0.220,0.120,0.330,0.330] 

Python的自動轉換在[0.2,0.22,0.22,0.12,0.33,0.33],但實際上是零我的計算中有意義的數字,所以我想將它們保留在數組中。 我知道我可以導入十進制,並使用十進制的單個值,但我怎麼能保持所有尾隨零或np.array?

認爲您正在使用python腳本插入實驗數據,直到第三個數字爲止的數據都是精確的,所以我想跟蹤0.020意味着第三個數字實際上是0.我該如何實現此任務?對於化學家或工程師而言,這是一個非常重要的問題。

我需要它,因爲我必須跟蹤下一次計算的有效數字......理想情況下,我必須計算這種情況下有效數字3的數量並在下一次計算中使用它,這是一種使用與有效數字相關的箱寬繪製歷史圖。

+1

你想要計算什麼? – timgeb

+3

'0.200'和'0.2'之間沒有區別。要麼使用小數,要麼使用字符串,如果你關心這些零。 – poke

+2

在內部,這些數字將用浮點數表示。你看到的僅僅是這個數字的表示。如果你需要確切的表示,你應該使用gmp庫。 – Bort

回答

3

這個問題有點固有缺陷,我想。不僅0.2000.2之間沒有真正的區別,但計算機不會以十進制格式存儲數據,只是二進制。 (爲此,計算機可能0.2存儲爲0.20000000000000000000001只是因爲精度的問題,但是這實際上不太可能在由於二進制表示的侷限性存儲水平截斷。)

如果你只是想打印的值三個顯著數字,你可以使用

print "%.3f" % float_var 

如果你想圓未來所有的計算,以3個小數點,使用

round(float_var,3) 

但就實際計算中呃,沒有什麼可以從中獲得的。無論您使用Python,C,Java還是鉛筆和紙,0.200在計算上的效果都與0.2相同。

編輯:如果你真的需要有效數字,沒有理由不能使用列表中的小數對象。 https://docs.python.org/2/library/decimal.html提供從字符串轉換他們集體的相當快速的方法:

data = map(Decimal, '1.34 1.87 3.45 2.35 1.00 0.03 9.25'.split()) 

或者,如果你已經有了彩車的數組,你需要把三個顯著數字,你可以這樣做:

import decimal 

def toDecimal(x): # x is a float. 
    return decimal.Decimal(str(x)).quantize(decimal.Decimal('1.000')) 

data = map(toDecimal, float_var_list) 

就算有效數字的數量,我不認爲有一個內置函數,但玩弄字符串會給你一個答案沒有太大麻煩。

def numDigits(x): # x is a Decimal object. 
    splitDecimal = str(x).split(".") 
    return len(splitDecimal[1]) 
+0

謝謝我知道這一點,但例如認爲你是從一個實驗中插入值,這些值是精確的,直到第三個數字,這是一個化學家或工程師的重要信息我怎麼能存儲它? –

+0

如果您確實需要有效數字,則沒有理由不能在列表中使用小數對象。 https://docs.python.org/2/library/decimal.html提供了一種非常快速的方式來轉換它們:'data = map(Decimal,'1.34 1.87 3.45 2.35 1.00 0.03 9.25'.split())' – TheSoundDefense