我在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中渲染多项式或将其写在纸上?
答案 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()
给出:
答案 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代码。)