Numpy排列浮点不一致

2024-04-23

我有一个相当简单的 numpy 任务:创建一个长数组,每个元素递增 0.001。当然,np.arange就是答案。我将自己限制为默认精度(float64)。对结果的一个简单检查是数组的每 1000 个元素应该具有相同的小数部分。我通过绘图检查了这一点(参见附图中的蓝线),但事实并非如此。

tmin = 212990552.75436273
tmax = 213001474.74473435
tbins = np.arange(tmin, tmax, 0.001)
plt.plot(tbins[::1000] % 1)

嗯,我想……浮点怪物又来袭了。我的起始值很大,但不是that大到它搞砸了 64 位浮点数。根据我的预感,我尝试了以下方法,我think应该是同一件事:

nbins = tmin + np.arange(0, tmax-tmin, 0.001)
plt.plot(nbins[::1000] % 1)

田田!那里有一个差异。在数组中约 10^7 个元素上,差异单调上升到 0.14。请注意,由于 tmin 是 x.xxx36273,因此我希望所有数字都采用 x.xxx36273 的形式。nbins有那个,tbins才不是。

In [68]: tbins[-1]
Out[68]: 213001474.60374644

In [69]: nbins[-1]
Out[69]: 213001474.74436274

致电numpy那里的专家 - 为什么会发生这种情况?


你基本上是正确的;如果您关心数组元素的精确小数,请使用第二种方法。

在你的第一次尝试中,tbins = np.arange(tmin, tmax, 0.001),您在一次计算中混合了大浮点数和小浮点数。给定元素的精确值计算为前一个元素和0.001。与之前的值相比,这个值总是很大0.001,所以这个求和不会很准确(为了在进行浮点加法时获得最佳精度,两个操作数应该具有相同的数量级)。

在你的第二次尝试中,nbins = tmin + np.arange(0, tmax-tmin, 0.001), 中的总和np.arange(0, tmax-tmin, 0.001)部分都非常准确,因为数量巨大tmin被遗漏了,只在最后添加。最后添加的tmin每个元素的准确性都会很差,这意味着最终每个元素都会通过one操作精度差。将其与第一次尝试进行比较,其中给定元素的值具有所有先前元素的累积误差。也就是说,元素在数组中的位置越靠前,情况就越糟糕(正如您的绘图所证实的那样)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Numpy排列浮点不一致 的相关文章

  • C 中的数组初始化

    我对以下代码有疑问 int main int array1 1 2 3 4 5 error in c warning in c int array2 1 2 3 4 5 int array3 5 1 2 3 4 5 这段代码在第 3 行给出
  • 在 Python 3.5 64 位上通过 pip 安装 OpenCV

    我尝试安装 OpenCV 但找不到任何合适的 pip 软件包 我决定上网查找有关如何安装它的官方文档 并发现this https opencv python tutroals readthedocs io en latest py tuto
  • Google PubSub 在阻止和等待消息时没有标准输出

    我正在使用这个问题底部的 Python 代码监听 Google PubSub 消息 它实际上是来自 Google 的异步拉取示例 我运行我的程序并输出到文件 python my script py tee log txt 如果我在接收消息时
  • C [x ... y] 范围赋值

    今天我遇到了一些代码 这些代码使用了我多年来进行 C 编程时从未见过的语法 MWE include
  • 这是在 python 中美白图像的正确方法吗?

    我在尝试着zero center and whiten CIFAR10数据集 但我得到的结果看起来像随机噪声 Cifar10数据集包含60 000尺寸的彩色图像32x32 训练集包含50 000和测试集包含10 000分别是图像 以下代码片
  • 如何动态构造方法?

    我设计了一个类 它非常标准 具有一些方法属性 class foo def f1 self print f1 def f2 self print f2 def fn self print fn 现在我想创建一个包含一组 foo 实例的类 cl
  • Python pandas cumsum() 在达到最大值后重置

    我有一个 pandas DataFrame 其中 timedeltas 作为这些增量的累积和 在单独的列中以毫秒表示 下面提供了一个示例 Transaction ID Time TimeDelta CumSum ms 1 00 00 04
  • 单击按钮时执行 python 脚本

    我有一个带有一个按钮的 HTML 页面 当我们单击该按钮时 我需要执行一个 python 脚本 并返回到包含结果的同一 HTML 页面 所以我需要对返回值进行一些验证并执行一些操作 这是我的代码 HTML
  • 计算两个表中等效行的交集

    我有两个 FITS 文件 让我们考虑一下例如第一个文件有 100 行和 2 列 第二个文件有 1000 行和 2 列 FITS FILE 1 FITS FILE 2 A B C D 1 2 1 2 1 3 1 2 2 4 1 2 我需要采取
  • 使用请求和多处理时的奇怪问题

    请检查这个Python代码 usr bin env python import requests import multiprocessing from time import sleep time from requests import
  • 如何使用 OpenCV 检测图像帧中的对象?

    我正在使用 Raspberry Pi 开发一个漫游器 它将清扫房间并捡起掉落在地上的物体 为了检测物体 我使用了在流动站操作开始时拍摄的参考图像 以及每 10 秒单击一次的图像 新图像 为了确定图像帧是否发生变化 我在参考图像和新图像之间进
  • 您忽略了哪些 PEP 8 准则,哪些是您坚持的? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 多年来 我编写的 Python 越多 我就越发现自己同意大多数准则 尽管我出于自己的原因始终有意地违反了一些准则 我很想知道 PEP 8 也可能
  • 如何在 Python 中小写字符串?

    有没有办法将字符串转换为小写 Kilometers kilometers See How to change a string into uppercase https stackoverflow com questions 9257094
  • 如何让 list_blobs 表现得像 gsutil

    我只想获得 GCS 上假文件夹结构的第一级 如果我运行例如 gsutil ls gs gcp public data sentinel 2 tiles 我得到一个这样的列表 gs gcp public data sentinel 2 til
  • Java:如何复制对象数组?

    现在 我有一个 Point 对象数组 我想制作一个COPY该数组的 我尝试过以下方法 1 Point temp mypointarray 2 Point temp Point mypointarray clone 3 Point temp
  • 如何提取Python代码文件中使用的函数?

    我想创建代码文件中使用的所有函数的列表 例如 如果我们在名为 add random py 的文件中有以下代码 import numpy as np from numpy import linalg def foo print np rand
  • Python 用 lambda 函数封闭作用域变量

    我写了这个简单的代码 def makelist L for i in range 5 L append lambda x i x return L 好的 现在我打电话 mylist makelist 因为稍后调用嵌套函数时会查找封闭范围变量
  • Mac OS X 上的 Python 框架和非框架构建之间的差异

    Question Mac OS X 上的 Python 框架构建和非框架构建 即标准 UNIX 构建 之间有什么区别 另外 各自的优点和缺点是什么 初步研究 以下是我在发布此问题之前找到的信息 Pythonmac SIG Why is Fr
  • 从tensorflow 2.0 beta中的tf.data.Dataset检索下一个元素

    在tensorflow 2 0 beta之前 要从tf data Dataset中检索第一个元素 我们可以使用迭代器 如下所示 usr bin python import tensorflow as tf train dataset tf
  • 使用按钮从 Django 项目根下载文件

    So this is the webpage I m creating atm with Django 1 8 希望用户能够将数据导出为 csv 当用户 在框中写下 Reddit 子版块名称 按下 获取数据 按钮 会发生什么 它创建了一个

随机推荐