在 Python 中索引浮点值

2023-12-06

我有一个从数据结构生成的浮点数列表,它是一个字典列表 - 即我已经迭代了整个列表并选择了给定字典中的某些值。现在,我想实际对这些数据点做一些事情,为此我需要对原始位置的一些参考。我尝试简单地使用数据点作为关键,但在尝试和失败之后,我进行了一些挖掘,并意识到由于计算机的工作方式,浮点数并不能精确表示。

所以,我需要的是某种方法为列表中的每个字典分配唯一值,例如:

list = [...]
vallist = []
index = {}
for i in range(0, len(list)):
value = i+0.123
vallist.append(value)
index[value] = i

但我显然需要为每个值分配一个唯一的项目,以便能够指向它们在列表对象中的位置。我想象我可能会创建一个名为“valuelist”或其他东西的新对象,然后对其进行 int ,但这似乎可能有一个明显的解决方法,我只是太厚了而无法弄清楚。

重申一下,我想要的是一种使值指向它们在列表中的原始位置的方法 - 在我的数据结构中,我的列表包含大量字典,并且我处理它的方式有点复杂,所以我'我有点坚持我可能不切实际的结构。

Thanks!


首先,让我们解决使用浮点带来的问题。

由于计算机的工作方式,浮点数无法精确表示。

浮点数字are精确地在计算机中表示。然而,也有一些限制:

  • 分辨率是有限的。在有限的内存中不可能表示无理数,典型的浮点数只能表示几十位数字。
  • 一些十进制(以 10 为基数)数字没有精确的二进制表示。例如,0.1 不能精确地以 2 为基数表示。跑步"{0:.20f}".format(0.1)在Python中会返回0.10000000000000000555.

现在,根据数字的来源以及要执行的计算类型,有不同的可能解决方案来对它们进行索引。

对于可以以 10 为基数精确描述的数字,您可以使用Decimal。这准确地表示以 10 为基数的数字:

>>> from decimal import Decimal
>>> "{0:.20f}".format(Decimal('0.1'))
'0.10000000000000000000'

如果您只处理有理数(即使是那些没有精确小数表示的数),您可以使用分数.

请注意,如果您使用小数或分数,则需要在处理中尽快使用它们。在后期从浮点数转换为小数/分数违背了它们的目的 - 你无法获取不存在的数据:

>>> "{0:.20f}".format(Decimal('0.1'))
'0.10000000000000000000'
>>> "{0:.20f}".format(Decimal(0.1))
'0.10000000000000000555'

此外,使用小数或分数也会带来显着的性能损失。对于严重的数字运算,您需要始终使用 float,甚至整数在其位置

最后,如果您的数字不合理,或者即使使用小数或分数也遇到索引错误,那么您最好的选择可能是索引rounded数字的版本。使用buckets如果需要的话。collections.defaultdict可能对此有用。

你也可以保留一棵树,或者使用二分查找在具有自定义比较功能的列表上,但您不会O(1) lookup

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

在 Python 中索引浮点值 的相关文章

随机推荐

  • 如何获取大 LinkedIn 图片共享格式

    我正在使用 linkedin api 在 linkedin 上分享帖子 如下所示 How to get make post like this through api 我正在尝试帖子正文的所有组合 但无法发布如上所述的内容 comment
  • 在 Ionic 4 应用程序中进行的 API 调用无法在 Android 设备上运行

    我可以使用以下命令在笔记本电脑上运行我的离子应用程序ionic lab命令 该应用程序调用 IMDB api 并显示从中检索到的数据 现在 我正在尝试在 Android 设备上运行该应用程序 使用以下命令 ionic cordova run
  • macOS Mojave 版本 10.14.1 bash-3.2 expr:语法错误

    我遇到这样的错误 expr syntax error 我的脚本是 bin bash echo expr index sarasara a 如何修复它 man expr最后给出这个 根据 POSIX 标准 使用字符串参数length subs
  • 我可以使用 allocate 来复制对象的对象吗?

    我有一个从 TPersistent 三级继承的对象 我想使用Assign程序 MyFirstObj GrandSonOfPersistent Create I modify the objects inside MyFirstObj MyS
  • 如何使用GridBagConstraints创建布局?

    我想像这样布局我的 JPane 这样 顶部部分比底部部分更大 更高 顶部部分由另一个 JPanel 组成 并使用 Graphics 对象来显示图像 而底部部分也由另一个 JPanel 组成 但使用 Graphics 对象来绘制一些线条和文字
  • sqlite是否缓存查询结果以进行优化?

    我在 sqlite 中注意到了这种行为 当我重新使用游标对象时 任务管理器中的工作集内存不断增加 直到我的程序抛出内存不足异常 我重构了代码 以便每次查询时我都会打开一个到 sqlite 文件的连接 查询我想要的内容 然后关闭连接 后者似乎
  • 如何从 Wix 安装程序将自签名 SSL 证书安装到商店中?

    我找不到任何有关如何针对当前版本的 Wix Toolset 3 11 1 2318 执行此操作的文档 鉴于我有一个cert cer文件在我的SourceDir and INSTALLDIR如何在安装时将其放入 Windows 受信任的根证书
  • 无法读取 dotnet core 中链接的 appsettings.json 文件中的值

    在一个 aspnetcore 2 0 项目中 我尝试在我的 Web 应用程序和几个 xunit 测试项目中设置一个共享的 appsettings json 文件 首先 当我 定期 将 appsettings json 单独添加到我的项目中时
  • 定期 JobScheduler 不尊重约束

    使用JobScheduler 我设置了一个简单的JobService如下 TargetApi 21 public class SimpleJobService extends JobService private static final
  • wxpython菜单栏不显示

    我正在尝试使用 wxpython for gui 编写一个时间表程序 并使用 wxpython wiki 上的入门教程来加快 wxpython 的速度 但是当我尝试向 wxFrame 添加菜单栏时 菜单栏不显示 有什么想法为什么会发生这种情
  • 如何在 Intel 环形和网状架构上选择引导处理器 (BSP)

    第2 13 2节提到仲裁 ID 用于确定哪个处理器首先发出无操作周期 我在多个来源和英特尔手册上看到了这一点 引用 MP 初始化序列的英特尔手册仅在存在 系统总线 时以及在此之前最初存在 APIC 总线 时解决 Pentium 4 我的印象
  • 在 iOS (Flutter) 中使用 Firebase 和 Geolocator(或任何 Swift 插件)构建错误

    我正在尝试创建一个使用 Firebase 和 Geolocator 插件的 flutter 应用程序 我将使用的 Firebase 插件认证 使用RTDB and FCM The 地理定位器显然是一个非常可靠的位置感知插件 在 Androi
  • 如何在 Windows 上通过内置命令使用 subprocess.Popen

    在我的旧 python 脚本中 我使用以下代码来显示 Windows cmd 命令的结果 print os popen dir c read 正如 python 2 7 文档所说os popen已经过时并且subprocess被推荐 我按照
  • 实例成员“view”不能在类型“GameScene”上使用

    我最近更新到 Xcode 7 Beta 现在收到一条错误消息 实例成员 视图 无法在第 5 行的 GameScene 类型上使用 有人知道如何解决此问题吗 另外 如果您想提供额外帮助 请参阅我的另一个问题 ConvertPointToVie
  • 在智能卡上上传 .cap 文件?

    我有一张新卡 其 ATR 代码如下 3B 68 00 00 00 73 C8 40 12 00 90 00 我在谷歌上搜索了这张ATR 最后我知道这是一张 巴西电子公积金卡 问题是我该如何使用这张卡 我的意思是它支持哪些 APDU 有它的数
  • PHP - 使用表单输入中的 id 制作 switch 语句

    我正在用 PHP 做一个简短的测验 根据 4 个是 否问题告诉你你想到的生物是什么 我这样做是为了根据您对每个问题的回答 您会遇到不同的问题 我主要使用 switch 语句来完成此操作 我的问题是有什么方法可以使用条件作为表单提交按钮的 i
  • Flutter 蓝牙热敏打印机集成

    我有一个 flutter 食品配送应用程序 除此之外 我还有一个单独的餐厅应用程序 我可以在其中接受和拒绝订单 我很长一段时间以来一直在尝试做一些事情 以便当餐厅接受订单时 蓝牙热敏打印机会自动打印出一张收据 我找到了很多代码 但我不明白如
  • Powershell:将 pracl 命令的输出通过管道传输到数组

    pracl 是一个 sysinternal 命令 可用于列出目录的 ACL 我有一个共享列表 我想创建一个 csv 文件 这样对于每个 ACL 条目 我希望共享路径位于一列中 共享权限位于下一列中 我试图通过使用以下代码来做到这一点 inp
  • 数组到 SVG,使用 PHP 的灵活算法

    问题 我有几个不同的数组 例如 0 21 0 001 0 0245 0 31 0 05 1234 1342 1232 1625 2200 2205 1804 5 12 42 2 32 42 my problem now is I m loo
  • 在 Python 中索引浮点值

    我有一个从数据结构生成的浮点数列表 它是一个字典列表 即我已经迭代了整个列表并选择了给定字典中的某些值 现在 我想实际对这些数据点做一些事情 为此我需要对原始位置的一些参考 我尝试简单地使用数据点作为关键 但在尝试和失败之后 我进行了一些挖