【发布时间】:2014-05-19 23:15:19
【问题描述】:
您好,我有一个有点奇怪的问题。我正在转换一个数字列表(代表物理测量值),其中每个数字都以任意单位的特定精度报告,具体取决于它来自的研究。这是我的意思的一个例子:
[...,105.0,20.0,3.5,4.25,9.78,7.2,7.2]
这些当然是类型:
<type 'numpy.float64'>.
如果我打印出最后一个数字,例如:
print list[-1]
>>> 7.2
但是,如果以这种方式访问,我会得到:
7.2000000000000002
我知道浮点数默认为 64 位,因此使用它们进行计算(即 - 转换此测量列表)会返回一个 64 位的转换值。以下是转换后的值的示例:
[105.27878958,20.0281600192,3.47317185649,4.27596751688,9.82706595042,7.27448290596,7.26291009446]
以任何一种方式访问它们(使用打印或不使用),都会返回一个 64 位数字。但显然还有其他事情发生,否则打印功能将不知道如何显示真实的测量值。我想将转换后的值报告为与原始测量值相同的准确度。有没有办法在 python 中做到这一点?
【问题讨论】:
-
看看here。取决于您是要对数字进行四舍五入还是只是通过修改打印的内容或相应地格式化为字符串来修改输出。
-
我希望它与测量值完全相同。当我显式打印转换列表的编号时,我希望它打印出与相应测量值相同的位数。
-
我看了看 - 所有解决方案看起来都像是在四舍五入到某个指定的预定义位置。
-
print函数不显示“真实测量值”,它具有一些内置的舍入功能,可以让我们的人类大脑免于底层浮点表示的恐惧。 -
每个程序员都应该知道的关于浮点运算的知识floating-point-gui.de 使用 Numpy 的目的是可以访问用 C 甚至 Fortran 编写的算法和库来处理数据。这意味着数据将存储在 C 中。如果您想要精确的精度,您可以使用标准库中的 Decimal 模块,但是您将不会获得特定于 Numpy 的加速,因为数据随后将存储为 Python 对象而不是在 C 中。
标签: python numpy significant-digits