如何保留列表或np.array中的尾随零?

2024-06-13 04:59:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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]中自动转换它,但事实上,零在我的计算中是重要的数字,所以我希望将它们保留在数组中。 我知道我可以导入decimal并对一个值使用decimal,但如何将所有尾随的零保留在一个列表或np.数组?在

假设你正在使用python脚本插入实验数据,数据在第三个数字之前都是精确的,所以我想跟踪一下0.020意味着在第三个图中实际上是0。我怎样才能完成这项任务?对于化学家或工程师来说,这是一个非常重要的问题。在

我需要它,因为我要为下一次计算跟踪重要数字。。。理想情况下,我必须计算有效数字的数量,然后在下一个计算中使用它,这是一种与有效数字数量相关的箱子宽度的直方图。在


Tags: 数据test脚本列表数量宽度np情况
1条回答
网友
1楼 · 发布于 2024-06-13 04:59:28

我认为,这个问题本身就有点缺陷。不仅0.2000.2之间没有真正的区别,而且计算机不以十进制格式存储数据,只存储二进制数据。(为此,计算机可能仅仅因为精度问题而将0.2存储为0.20000000000000000000001,但由于二进制表示的限制,这实际上不可能在存储级别截断。)

如果只想用三个有效数字打印值,可以使用

print "%.3f" % float_var

如果你想把未来所有的计算四舍五入到小数点后三位,使用

^{2}$

但就实际计算而言,没有任何收获。0.200对计算的影响与{}相同,无论您使用的是Python、C、Java还是铅笔和纸张。在

编辑:如果你真的需要有效数字,你没有理由不能在列表中使用十进制对象。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])

相关问题 更多 >