[英]How can I keep trailing zeros in a list or np.array?
我正在使用python執行一些統計,我有這個數據集:
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的數量並在下一次計算中使用它,這是一種使用bin寬度與有效數字的數量有關。
我認為問題是固有的缺陷。 不僅0.200
和0.2
之間沒有真正的區別,而且計算機不會以十進制格式(僅二進制)存儲數據。 (為此,計算機可能只是由於精度問題而將0.2
存儲為0.20000000000000000000001
,但是由於二進制表示的限制,實際上無法在存儲級別截斷。)
如果只希望用三個有效數字打印值,則可以使用
print "%.3f" % float_var
如果您想將所有將來的計算四舍五入到小數點后三位,請使用
round(float_var,3)
但是就實際計算而言,沒有任何收獲。 無論您使用的是Python,C,Java還是鉛筆和紙, 0.200
的計算效果都與0.2
相同。
編輯:如果您確實需要有效數字,則沒有理由不能在列表中使用Decimal對象。 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])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.