簡體   English   中英

如何在列表或np.array中保持尾隨零?

[英]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.2000.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM