当前位置: 首页 > 知识库问答 >
问题:

Python中的机器ε

夏祺然
2023-03-14

我目前正在学习的一本手册(我是新手)说:

“小于机器ε的数字在数字上是相同的”

使用Python,可以通过键入

eps = numpy.finfo(float).eps

如果我查一下

1 + eps/10 != 1

我获得False。

但如果我查一下

0.1 + eps/10 != 0.1

我明白了。

如果我将eps除以100,我的后一个逻辑表达式将变为False。那么,机器epsilon是如何工作的呢?Python文档只是说

“可表示的最小正数,使1.0 eps!=1.0。eps的类型是合适的浮点类型。”

提前谢谢你。

共有2个答案

甄阳朔
2023-03-14

在这种情况下,您实际上不需要np。finfo。你想要的是np。间距,它计算输入和下一个可以精确表示的最大数字之间的距离。

本质上,np.spacing计算任何给定数字的"EPS",它使用数字的数据类型(本地python浮点数是64位浮点数),因此np.float32np.float16将给出与64位浮点数不同的答案。

例如:

import numpy as np

print 'Float64, 1.0 -->', np.spacing(1.0)
print 'Float64, 1e12 -->', np.spacing(1e12)
print 'Float64, 1e-12 -->', np.spacing(1e-12)
print ''
print 'Float32, 1.0 -->', np.spacing(np.float32(1.0))
print 'Float32, 1e12 -->', np.spacing(np.float32(1e12))
print 'Float32, 1e-12 -->', np.spacing(np.float32(1e-12))

由此产生:

Float64, 1.0 --> 2.22044604925e-16
Float64, 1e12 --> 0.0001220703125
Float64, 1e-12 --> 2.01948391737e-28

Float32, 1.0 --> 1.19209e-07
Float32, 1e12 --> 65536.0
Float32, 1e-12 --> 1.0842e-19
云默
2023-03-14

浮点数有一定的精度,在科学记数法中精确到小数点后几位。数字越大,表示法中的最低有效数字就越大,因此可能对该数字产生影响的“ε”就越大。

因此,epsilon是相对于它被添加到的数字的,这实际上在您引用的文档中已经说明:“……这样1.0 eps!=1.0”。如果“参考”数小于一个数量级,则eps也更小。

如果不是这样,你根本无法计算比EPS更小的数字(2.2e-16在我的例子中)。

 类似资料:
  • 问题内容: 我试图了解什么是机器epsilon。根据维基百科,可以如下计算: 但是,它仅适用于双精度数字。我有兴趣修改它以支持单精度数字。我读到可以使用numpy,尤其是类。有人可以帮忙修改功能吗? 问题答案: 对于给定的float类型,获取机器epsilon的更简单方法是使用:

  • 机器学习是一门研究如何使用计算机模拟人类行为,以获取新的知识与技能的学科。它是人工智能的核心,同时也是处理大数据的关键技术之一。机器学习的主要目标是自动地从数据中发现价值的模式,亦即将原始信息自动转换为人们可以加以利用的知识。

  • 问题内容: 当您要依次遍历数字列表时,您将编写: 但是,如果要随机遍历范围(0..999)的数字列表怎么办?需要(在每个迭代中)随机选择在任何先前迭代中未选择的数字,并且需要对范围(0..999)内的所有数字进行迭代。 你知道该怎么做(聪明)吗? 问题答案: 您可以习惯随机播放列表: 顺便说一句,在许多情况下,您将在其他编程语言中使用整数范围内的循环,则可以直接描述要在Python中迭代的“事物”

  • Scikit-learn (http://scikit-learn.org/) 是一个机器学习领域的开源套件。整个专案起始于 2007年由David Cournapeau所执行的Google Summer of Code 计画。而2010年之后,则由法国国家资讯暨自动化研究院(INRIA, http://www.inria.fr) 继续主导及后续的支持及开发。近几年(2013-2015)则由 IN

  • 问题内容: 所以我基本上是在一个项目中,计算机从单词列表中提取一个单词,然后为用户弄乱它。只有一个问题:我不想一直在列表中写很多单词,所以我想知道是否有一种方法可以导入很多随机单词,所以即使我也不知道它是什么,并且那我也可以玩游戏吗?这是整个程序的编码,我只输入了6个字: 问题答案: 如果您重复执行此操作,我将在本地下载它并从本地文件中提取。* nix用户可以使用。 例: 从远程字典中提取 如果您

  • 这份文件的目的是要提供 Python 之机器学习套件 scikit-learn (http://scikit-learn.org/) 的中文使用说明。一开始的主要目标是详细说明 scikit-learn 套件中的范例程式的使用流程以及相关函式的使用方法。目前使用版本为 scikit-learn version 0.19 以上