[英]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笔记本中的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.