Python 浮点精度格式说明符

2023-12-25

假设我有一些 32 位数字和一些 64 位数字:

>>> import numpy as np
>>> w = np.float32(2.4)
>>> x = np.float32(4.555555555555555)
>>> y = np.float64(2.4)
>>> z = np.float64(4.555555555555555)

我可以将它们打印出来%f但它有额外的、不需要的小数:

>>> '%f %f %f %f' % (w, x, y, z)
'2.400000 4.555555 2.400000 4.555556'

我可以用%g但它似乎有一个小的默认精度:

>>> '%g %g %g %g' % (w, x, y, z)
'2.4 4.55556 2.4 4.55556'

我想我应该使用类似的东西.7对于 32 位值和.15对于 64 位值:

>>> '%.7g %.7g %.15g %.15g' % (w, x, y, z)
'2.4 4.555555 2.4 4.55555555555556'

这似乎工作得相当好,但精度数字也用于小数点前面的数字,例如34567.375768。

总之,将浮点值序列化为文本的正确方法是什么,以便为 32 位和 64 位值保留适当的精度,但不使用任何不必要的空间?

Update:

我的例子think输出应该是:

number                float32     float64
5                     5           5
0.1                   0.1         0.1
2.4                   2.4         2.4
4.555555555555555     4.5555553   4.5555555555555554
12345678.92345678635  12345679.0  12345678.923456786

我用 .7/.16 得到的结果。这实际上看起来没问题:

>>> v32 = np.array([5, 0.1, 2.4, 4.555555555555555, 12345678.92345678635], dtype=np.float32)
>>> v64 = np.array([5, 0.1, 2.4, 4.555555555555555, 12345678.92345678635], dtype=np.float64)
>>> ('%.7g ' * len(v32)) % tuple(v32)
'5 0.1 2.4 4.555555 1.234568e+07 '
>>> ('%.16g ' * len(v64)) % tuple(v64)
'5 0.1 2.4 4.555555555555555 12345678.92345679 '

您可以尝试使用np.finfo http://docs.scipy.org/doc/numpy/reference/generated/numpy.finfo.html函数来获取与您的浮点相对应的精度

finfo32 = np.finfo(np.float32)
finfo64 = np.finfo(np.float64)

finfo32.resolution = 1e-6
finfo64.resolution = 1e-15

现在您知道需要多少位小数,例如 6,只需使用rstrip("0")去掉不必要的 0:

print ("%.6f" % your_float).strip("0")

如果你倾向于%g,也许您可​​能想使用动态格式,例如:

>>> strf = lambda v: ("%%.%ig" % max(np.ceil(np.log10(v)), 7)) % v
>>> strf(123.456789)
'123.45679'
>>> strf(123456789.12345)
'123456789'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 浮点精度格式说明符 的相关文章

随机推荐

  • php中session.use_cookies的使用

    我已经四处搜索以查找如果更改值对 php 会话的影响session use cookies to true or false但似乎对其工作方式没有影响 有什么用session use cookies在 php 中以及为什么需要它 这就是您希
  • ASP.NET MVC Remote属性方法参数总是传递null

    我有这个AdvertiserNameAvailable远程验证属性正在使用的方法 问题是AdvertiserNameAvailable正在调用而不将输入值传递给方法Name范围 当我进入该方法的调试时 我看到Name参数总是null pub
  • 如何在 GitHub Actions 中缓存 dotnet 安装

    我的 CI 管道中有两个步骤 一是缓存dotnet的安装路径 二是dotnet安装 并使用 windows 2019 图像 但系统永远不会识别 net 7可用 它始终安装 net 6 0 缓存还显示缓存了 200MB 但可能某些 PATH
  • 如何处理 iPhone 中 uitableviewcell 上每个按钮的切换按钮

    我的代码运行良好 但仅适用于单个单元格 当我定义 5 行时 它仅适用于最后一个单元格 如果我点击 1 个单元格 则值displayimage仅在最后一个单元格上 它不显示我单击的位置以及我单击的单元格如何处理每个单元格的toogle按钮更改
  • 为什么我要使用 Enumerable.ElementAt() 而不是 [] 运算符?

    这似乎是一个愚蠢的问题 但我还没有找到答案 所以就在这里 在这两种情况下 如果您未能检查集合的边界 您将收到 超出范围 异常 这只是编码风格偏好吗 如果有人需要一个例子 List
  • 制作平台游戏,需要方法停止运行

    我正在用 Flash 制作一个平台游戏 我有一个目标类 该类包含目标精灵的代码 当你击中它时 它会继续游戏的下一部分 在目标构造函数内部 添加了2个事件监听器 它们如下 addEventListener Event ADDED beginC
  • 如何在Boost Spirit中设置最大递归

    使用 boost spirit 如果我有递归规则来解析括号 rule
  • Java - 等待和notifyAll

    当你对一个没有等待的对象调用notifyAll方法时会发生什么 应该有例外还是正常情况 正如您在这里所看到的 对未等待的对象调用notifyAll 不会产生任何效果
  • 如何在 Symfony2 数据库查询中使用 MATCH

    我正在为我的 Symfony2 项目构建一个搜索功能 并为其编写了 SQL 如下所示 SELECT dlc title dlc description dlc keywords FROM ShoutMainBundle Dlc dlc WH
  • 测量外部 CDN 资源的访问者 HTTP 缓存命中率

    我的网站使用几种常见的 CDN 托管资源 例如bootstrap css jquery js and fontawesome css 是否可以通过 JavaScript 获取信息 我的网站访问者在其 Web 浏览器中是否有这些资源的热缓存
  • 以编程方式更改本地安全策略

    我想在 C 中更改本地安全策略 交互式登录 不需要 ctrl alt del 我怎样才能做到这一点 我找到了我必须在注册表中更改的答案 Windows 注册表编辑器版本 5 00 HKEY LOCAL MACHINE SOFTWARE Mi
  • Git 子模块工作流程问题

    最近 我们的 Git 存储库遇到了很多问题 我们是应用程序之间总共 4 个共享存储库的 git 子模块的用户 例如 存储库 网站 共有 3 个子模块 submodule vendor api path vendor api url emai
  • ionChange - 仅检测 Ionic 2 中从视图到模型的变化

    我有一个 Ionic 2 应用程序 允许安排通知 提醒功能 嗯 要求是 当用户进入提醒页面时 应该检查是否有 已保存提醒 如果有已保存的提醒 我目前正在保存此信息 存储 时钟应显示并保存提醒时间 切换开关处于活动状态 否则 时钟应显示当前时
  • 如何消除 WinForms 滚动动画中的抖动现象?

    我正在用 C 编写一个简单的控件 其工作方式类似于图片框 只不过图像不断向上滚动 并从底部重新出现 动画效果由计时器 System Threading Timer 驱动 该计时器从缓存的图像 分两部分 复制到隐藏缓冲区 然后在其 Paint
  • Gradle:“无法缓存配置缓存状态”

    Configuration cache state could not be cached field actions from type org gradle api DefaultTask error writing value of
  • Java 中的 IEqualityComparer 接口

    更具体地说 我想要一个接口来比较只能比较相等性的对象 例如复数 但没有全序 它应该有 注意它只返回一个布尔值是 否 boolean Equals T object1 T object2 和一个哈希码函数 这样 当我使用对象 例如收集 相等
  • 如何使用 Unix 或 Windows 风格的换行符 [重复]

    这个问题在这里已经有答案了 我正在阅读stdin有时有 UNIX 风格的换行符 有时是 Windows 风格的换行符 如何使用任一类型的换行符 假设您知道会有换行符 解决方案是消耗一个字符 然后决定 10 LF Unix style new
  • Mongo 查询数组中的嵌套字段。

    我有一个具有以下结构的文档 id fkwjefioew genres id fewkjfewf name Shooter 我需要能够使用 mongo 的 in 进行查询 以查看文档是否具有传递参数的流派名称 例如 如果我将 Shooter
  • Jest.js 错误:“已收到:序列化为同一字符串”

    我在这个测试中遇到了一个奇怪的问题 交易测试 js import Deal from src models Deal import apiProducts from mocks api products describe Deal gt d
  • Python 浮点精度格式说明符

    假设我有一些 32 位数字和一些 64 位数字 gt gt gt import numpy as np gt gt gt w np float32 2 4 gt gt gt x np float32 4 555555555555555 gt