在IPython笔记本中的漂亮打印多项式

时间:2015-02-21 13:28:47

标签: python numpy ipython ipython-notebook

我在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中渲染多项式或将其写在纸上?

4 个答案:

答案 0 :(得分:2)

您可以使用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()

给出:
 enter image description here

答案 1 :(得分:0)

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

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)+" + "之类的东西或更方便的东西。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

>>> 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

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