python的精确和与点积

accup的Python项目详细描述


accupy

python的精确和(点)产品。

CircleCIcodecovCode style: blackaccuratePyPi VersionDOIGitHub starsPyPi downloads

总和

如果列表中的值是浮点值,则汇总列表中的值可能会很困难 数字;可能会发生数字相消,结果可能会出错。一个 典型的例子是和

1.0e16 + 1.0 - 1.0e16

实际结果是1.0,但在双精度中,这将导致0.0。 虽然在这个例子中失败是显而易见的,但它可以得到更多 比这更狡猾。Accupy提供

p,exact,cond=accupy.generate_ill_conditioned_sum(100,1.0e20)

给定长度和目标条件数,将生成 很难总结的浮点数。

AccuPy有以下求和方法:

  • accupy.kahan_sum(p)Kahan summation

  • accupy.fsum(p):矢量化包装 math.fsum(其中 使用shewchuck的算法[1](另请参见 here)。

  • accupy.ksum(p, K=2):k倍精度求和(来自[2]

所有求和方法对多维numpy数组的第一维求和。

我们来比较一下。

精度比较(总和)

正如所料,天真的 sum表现非常糟糕 有病态的总和;同样地 ^{} 它使用成对求和。卡汉的总结并没有明显好转;this, too, is expected

accupy.ksum中以2倍精度计算和给出了正确的 如果条件至多在机器精度范围内,则结果;进一步 增加K有助于改善状况。

shewchuck在math.fsum中的算法总是给出正确的结果 浮点精度。

运行时比较(总和)

我们比较越来越多的固定大小的和(上面)和越来越大的和, 但有固定的数量。在这两种情况下,最不准确的方法是 最快(numpy.sum),最准确最慢(accupy.fsum)。

点产品

Accupy对点产品有以下方法:

  • accupy.fdot(p):长度为{em1}$n的点积转换为 长度总和2n,计算方式 math.fsum

  • accupy.kdot(p, K=2):k倍精度的点积(来自 [2]

我们来比较一下。

精度比较(点)

Accupy可以使用

x,y,exact,cond=accupy.generate_ill_conditioned_dot_product(100,1.0e20)

并对不同方法的精度进行了比较。

关于和,numpy.dot是最不精确的,其次是kdot的实例。 fdot可证明精确到最后一位

运行时比较(dot)

numpy的numpy.dot比accupy提供的所有替代方案都快。 这是因为截断错误的簿记需要更多的步骤,但是 主要是因为numpy高度优化的dot实现。

参考文献

  1. Richard Shewchuk, Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates, J. Discrete Comput. Geom. (1997), 18(305), 305–363

  2. Takeshi Ogita, Siegfried M. Rump, and Shin'ichi Oishi, Accurate Sum and Dot Product, SIAM J. Sci. Comput. (2006), 26(6), 1955–1988 (34 pages)

依赖性

AcCuPy需要提供的C++ Eigen library debian/ubuntu作者 ^{}

安装

accupy是available from the Python Package Index,所以使用

pip install -U accupy

您可以安装/升级。

测试

要运行测试,只需签出此存储库并键入

MPLBACKEND=Agg pytest

许可证

accupy发布在MIT license下。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java IntelliJ找不到依赖项选项卡   java向字符串数组string[]添加元素并在Junit中测试结果   如何在eclipse中获取活动java项目的名称   如何使用java在mysql中插入时间   java ArrayList更新了插入一行,但Jtable仍然没有刷新   如何在JavaSwing中命名坐标(点)   java Matcher/模式不打印   java错误地设置了arraylist   使用UsernamePasswordCredential提供程序的java列表Azure AD   java在HTTP请求中设置UTC时间   未加载事件:jquery完整日历Java集成   java Maven插件依赖项无法从内部repo解析依赖项   Maven更新重置Java版本   java如何向中添加图片。带有Apache POI XWPF的docx,但不指定其大小   Java最大函数递归