繁体   English   中英

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

[英]Pretty printing polynomials in 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中渲染多项式或在纸上书写一样?

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

这使:
在此输入图像描述

您总是可以使用返回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)+" + "或更方便的东西。

IPython有一个如何做到这一点的例子

如果没有针对IPython笔记本中的LaTeX输出,我编写了numpy.polynomial.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

通过添加类似_repr_latex_方法,如解释在这里 ,为IPython中,你可以做同样的(只是改变**符号^和去除* ,你会得到LaTeX的代码)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM