程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了numpy:如何设置精确打印 poly1d大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决numpy:如何设置精确打印 poly1d?

开发过程中遇到numpy:如何设置精确打印 poly1d的问题如何解决?下面主要结合日常开发的经验,给出你关于numpy:如何设置精确打印 poly1d的解决方法建议,希望对你解决numpy:如何设置精确打印 poly1d有所启发或帮助;

我想在打印多项式时设置精度(更一般的格式)。例如:

>>> import numpy as np
>>> beta = np.asarray([-3.61380614191654e-09,2.489464876955e-05,-0.0836384579176789,143.213931472633])
>>> p = np.poly1d(beta)
>>> p
poly1d([-3.61380614e-09,2.48946488e-05,-8.36384579e-02,1.43213931e+02])
>>> print(p)
            3             2
-3.614e-09 x + 2.489e-05 x - 0.08364 x + 143.2
>>> np.set_printoptions(precision=8) # this has no effect
>>> print(p)
            3             2
-3.614e-09 x + 2.489e-05 x - 0.08364 x + 143.2

我想得到,用多项式调用 print,类似于:

                 3                  2
-3.61380614e-09 x + 2.48946487e-05 x - 0.08363845 x + 143.21393147

[编辑]

我尝试使用 numpy.polynomial 作为 A. Donda 建议,但我得到了不同的行为:

Python 3.8.6 (default,Jan 27 2021,15:42:20) 
[GCC 10.2.0] on linux
Type "Help","copyright","credits" or "license" for more information.
>>> import numpy as np
>>> beta = np.asarray([-3.61380614191654e-09,143.213931472633])
>>> p = np.polynomial.polynomial(np.flip(beta))
>>> p
polynomial([ 1.4321393147e+02,-8.3638457918e-02,2.4894648770e-05,-3.6138061419e-09],domain=[-1,1],window=[-1,1])
>>> print(p)
poly([ 1.4321393147e+02 -8.3638457918e-02  2.4894648770e-05 -3.6138061419e-09])

使用 print(p) 打印多项式不会给我预期的结果

[Edit2]

Ubuntu 20.10 有 numpy 1.18.4。相反,使用 pip3 强制更新版本 (1.20.1),我得到了想要的结果。

解决方法

__str__ method of poly1d 使用自定义函数来格式化数字:

def fmt_float(q):
    s = '%.4g' % q
    if s.endswith('.0000'):
        s = s[:-5]
    return s

所以,你是对的,它不受 NumPy 的 printoptions 的影响。

但是 documentation for poly1d 说它是“旧多项式 API 的一部分”,最好使用 numpy.polynomial

>>> p = np.polynomial.Polynomial(np.flip(beta))
>>> p
Polynomial([ 1.432139e+02,-8.363846e-02,2.489465e-05,-3.613806e-09],domain=[-1,1],window=[-1,1])
>>> print(p)
143.213931472633 - 0.0836384579176789·x¹ + 2.489464876955e-05·x² - 3.61380614191654e-09·x³

np.flip 是必需的,因为除 poly1d 外,Polynomial 期望系数按升序排列。

这似乎解决了您的具体问题,获得了高精度的系数。但是,Polynomial.__str__ 仍然不尊重 printoptions

>>> np.set_printoptions(precision=3)
>>> print(p)
143.213931472633 - 0.0836384579176789·x¹ + 2.489464876955e-05·x² - 3.61380614191654e-09·x³

您可以在 NumPy 存储库中提交问题。

大佬总结

以上是大佬教程为你收集整理的numpy:如何设置精确打印 poly1d全部内容,希望文章能够帮你解决numpy:如何设置精确打印 poly1d所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: