【问题标题】:Pretty printing polynomials in IPython notebookIPython notebook 中漂亮的打印多项式
【发布时间】:2015-02-21 13:28:47
【问题描述】:

我在 IPython 笔记本中有一些多项式 x

import numpy as np
x = np.polynomial.polynomial.Polynomial([1,2,3])
x

然后x 打印为Polynomial([ 1., 2., 3.], [-1., 1.], [-1., 1.]),说实话很难看。我怎样才能像在 LaTeX 中渲染多项式或将其写在纸上一样进行正常打印?

【问题讨论】:

  • Numpy 1.16 将开箱即用地为您格式化多项式

标签: python numpy ipython ipython-notebook


【解决方案1】:

您可以使用 sympy 的 Poly 类将您的多项式渲染为漂亮的乳胶。 这里唯一的问题是,numpy 按递增程度的顺序列出系数,而 sympy 则相反。

In [1]: import numpy as np
   ...: nppoly = np.polynomial.polynomial.Polynomial([1,2,3])
   ...: nppoly
Out[1]: Polynomial([ 1.,  2.,  3.], [-1.,  1.], [-1.,  1.])

In [2]: import sympy as sp
   ...: from sympy.abc import x
   ...: sp.init_printing()
   ...: sp.Poly(reversed(nppoly.coef),x).as_expr()

给出:

【讨论】:

    【解决方案2】:

    您始终可以使用polynomial_obj.coef 检索多项式对象的系数,它返回一个 numpy 数组,然后您可以随意使用它来获得所需的输出。

    import numpy as np
    x = np.polynomial.polynomial.Polynomial([1,2,3])
    
    def get_prettified_output(polynomial):
        prettified_output = ""
        coefficients = polynomial.coef
        for i in xrange(len(coefficients)):
            prettified_output+= str(coefficients[i])+"*x**"+str(i)+" + "
        return prettified_output[:-2]
    
    print get_prettified_output(x)
    

    但是,您也可以使用 prettified_output+= str(polynomial.coef[i])+"*x^"+str(i)+" + " 之类的东西或更方便的东西。

    【讨论】:

    • 不是我想要的。当您在 LaTeX 中编写 $x^2$ 时,更多链接会呈现为漂亮的文本。
    • 我说你可以随心所欲地调制输出,但是这个东西可以给你一个开始
    【解决方案3】:

    IPython 有 an example 说明如何做到这一点。

    【讨论】:

      【解决方案4】:

      没有针对 IPython 笔记本中的 LaTeX 输出,我编写了 numpy.polynomial.Polynomial 类的 this small overload,以便很好地显示多项式对象:

      >>> P = MyPolynomial  # The custom class, with a modified __str__ method
      >>> X = P([0, 1])     # We define the monome X, to write polynomials simply
      >>> Q1 = 1 + 2*X + 17*X**3  # Example of a polynomial
      >>> # Was displayed poly([1.0, 2.0, 0.0, 17.0]) before... ugly!
      >>> print(Q1)  # Way nicer now!
      1 + 2 * X + 17 * X**3
      

      通过添加类似的_repr_latex_ 方法,如here 所解释的,对于IPython,您可以执行相同的操作(只需将** 符号更改为^ 并删除*,您将获得LaTeX 代码)。

      【讨论】:

        猜你喜欢
        • 2013-09-23
        • 2014-01-25
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 2017-02-22
        • 2021-03-06
        • 2011-05-06
        相关资源
        最近更新 更多