python 精度计算 性能_Python 优化存储和精度

优化存储

优化没有通用规则。我们通常关注性能优化,因为可以使用一些工具(例如大O复杂性度量)来判断算法能否有效地解决给定的问题。通常单独处理存储优化:可以研究算法的流程,并估计不同存储结构所需的存储空间。

在许多情况下,这两种考量是相互对立的。在某些情况下,一个性能非常好的算法可能需要大型数据结构。如果不能大幅增加所需的存储空间,就无法扩展这种算法。我们的目标是设计一种速度快且所用的存储量可接受的算法。

我们可能需要花时间研究算法的替代方法,从而找到一种能合理平衡时空(space-time tradeoff)的方法。在维基百科的链接里可以找到一些通用的优化技术。

Python中的一种内存优化技术是使用可迭代对象。它具有适当实例化集合的一些属性,但不一定占用存储空间。不适用于可迭代对象的运算很少(如len()函数)。对于其他运算,节省内存的特性使得程序可以处理非常大的集合。

优化精度

少数情况下,需要优化计算的精度。这有一定的挑战性,而且可能需要一些相当高级的数学运算来确定给定方法的精度限制。

在Python中,可以用fractions.Fraction值代替浮点近似。对于某些应用,这样做可以得到比浮点数更精确的解,因为相比浮点尾数,分子和分母使用了更多比特。

使用decimal.Decimal值来处理货币十分重要。一种常见的错误是使用float值。当使用float值时,由于作为输入的Decimal值与浮点数使用的二进制近似之间的不匹配,从而引入了额外的噪声位。使用Decimal值可以防止引入微小的误差。

在许多情况下,可以对Python程序进行小的改动,将float值转换为Fraction或Decimal值。在处理超越函数时,这种改动不一定有用。超越函数的定义涉及无理数。

根据用户需求降低精度

对于某些计算,分数值可能比浮点数更直观,这是以一种用户能理解并做出处理的方式来展示统计结果的一部分。

例如,卡方检验通常涉及计算实际值和预期值之间的 x^2 比较。随后可以用这个比较值来测试 x^2 的累积分布函数。当预期值和实际值没有特定关系(也称“空关系”)时,变化将是随机的,这个值往往很小。当接受了零假设后,需要在其他地方寻找它们的关系。当实际值与期望值区别较大时,我们可能会拒绝零假设,而进一步探索以确定两者关系的准确性质。

对于选定的 x^2 值和给定的自由度,决策通常基于 x^2 累积分布函数(cumulative distribution function,CDF)。尽管表格中的CDF值大多数是无理数,但通常不会保留超过2个或3个小数。它只是一个决策工具,0.049和0.05在实际意义上没有区别。

拒绝零假设广泛使用的概率是0.05,这是一个小于1/20的Fraction对象。在向用户展示数据时,可以将结果描述为分数形式,而像0.05这样的值不怎么直观。用1/20来描述关联的几率有助于人们感知这种关联的可能性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的整数类型可以表示非常大的整数(在理论上,它们可以无限大),这使得Python成为一种非常适合高精度计算的语言。 Python中的高精度计算可以使用内置的整数类型int来完成。我们可以直接使用int来存储计算大整数,而不需要考虑位数的限制。例如: ``` a = 123456789012345678901234567890 b = 987654321098765432109876543210 c = a + b print(c) ``` 输出结果为: ``` 1111111111111111111111111111111 ``` 当然,这并不意味着Python可以无限制地进行高精度计算。在实际使用中,由于内存的限制,Python的高精度计算也有其局限性。 除了使用内置的整数类型int,Python还提供了一些第三方库,如gmpy2和decimal,可以更加高效地进行高精度计算。这些库可以提供更多的功能,如支持小数、复数等类型的计算,并且可以更好地处理精度和舍入问题。 使用gmpy2库进行高精度计算的示例: ``` import gmpy2 a = gmpy2.mpz('123456789012345678901234567890') b = gmpy2.mpz('987654321098765432109876543210') c = gmpy2.add(a, b) print(c) ``` 输出结果为: ``` 1111111111111111111111111111100 ``` 使用decimal库进行高精度计算的示例: ``` from decimal import Decimal a = Decimal('123456789012345678901234567890') b = Decimal('987654321098765432109876543210') c = a + b print(c) ``` 输出结果为: ``` 1111111111111111111111111111100 ``` 总之,Python非常适合进行高精度计算,无论是使用内置类型还是第三方库,都可以轻松地完成高精度计算任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值