gpt4 book ai didi

numpy - 在 python 中模拟固定精度

转载 作者:行者123 更新时间:2023-12-02 07:49:25 25 4
gpt4 key购买 nike

对于大学数值分析类(class),我们正在从 Maple 过渡到 Numpy 和 Sympy 的组合,以提供类(class) Material 的各种插图。这是因为学生在前一个学期就已经学习了Python。

我们遇到的困难之一是在 Python 中模拟固定精度。 Maple 允许用户指定小数精度(例如 10 或 20 位数字),从那时起,每次计算都使用该精度进行,这样您就可以看到舍入误差的影响。在Python中我们尝试了一些方法来实现这一点:

  • Sympy 具有舍入到指定位数的函数。
  • Mpmath 支持自定义精度。

但这不是我们正在寻找的。这些选项计算精确结果并将精确结果四舍五入到指定的位数。我们正在寻找一种以指定精度执行每个中间计算的解决方案。例如,可以显示两个非常小的数字相除时可能发生的舍入误差。

迄今为止最好的解决方案似乎是 Numpy 中的自定义数据类型。使用 float16、float32 和 float64,我们至少能够指出可能出现的问题。这里的问题是我们总是需要使用一个元素的数组,并且我们仅限于这三种数据类型。

对于我们的目的来说,是否存在更灵活的东西?或者我们正在寻找的东西是否隐藏在 mpmath 文档中的某个地方?当然,有一些解决方法,可以将计算的每个元素包装在舍入函数中,但这会使学生难以理解代码。

最佳答案

您可以使用decimal 。有多种使用方式,例如localcontextgetcontext

文档中的 getcontext 示例:

>>> from decimal import *
>>> getcontext().prec = 6
>>> Decimal(1) / Decimal(7)
Decimal('0.142857')

localcontext 用法示例:

>>> from decimal import Decimal, localcontext
>>> with localcontext() as ctx:
... ctx.prec = 4
... print Decimal(1) / Decimal(3)
...
0.3333

为了减少输入,您可以缩写构造函数(文档中的示例):

>>> D = decimal.Decimal
>>> D('1.23') + D('3.45')
Decimal('4.68')

关于numpy - 在 python 中模拟固定精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41565331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com