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

3

我在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将为您提供开箱即用的LaTeX格式化多项式。 - Eric
4个回答

3
您可以使用sympy的Poly类将多项式渲染为漂亮的latex格式。唯一的问题在于,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()

这将提供:
在此输入图片描述


0

在IPython笔记本中不考虑LaTeX输出的情况下,我编写了这个小重载 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

通过添加类似的_repr_latex_方法,如这里所解释的那样,对于IPython,您可以做同样的事情(只需将**符号更改为^并删除*,您将获得LaTeX代码)。

0

0

您可以始终使用 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$时,它会呈现出漂亮的文本,还需要更多的链接。 - nmiculinic
我说过你可以随心所欲地调节输出,但这个东西可以给你一个起点。 - ZdaR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接