saikon
saikon

Reputation: 147

How to use Sympys NumPyPrinter?

I am trying to print my Sympy-expression as a string ready to be used with Numpy. I just cannot figure out how to do it.

I found that there is sp.printing.pycode: https://docs.sympy.org/latest/_modules/sympy/printing/pycode.html

The web page states that "This module contains python code printers for plain python as well as NumPy & SciPy enabled code.", but I just cannot figure out how to get it to output the expression numpy format.

sp.printing.pycode(expr)
'math.cos((1/2)*alpha)*math.cos((1/2)*beta)'

That web page also contain class NumPyPrinter(PythonCodePrinter) but I do not know how to use it. def pycode(expr, **settings) just seems to use return PythonCodePrinter(settings).doprint(expr) as a default all the time.

Upvotes: 2

Views: 1052

Answers (1)

MB-F
MB-F

Reputation: 23637

The definition of pycode is almost trivial:

def pycode(expr, **settings):
    # docstring skipped
    return PythonCodePrinter(settings).doprint(expr)

It should be straight forward to run NumPyPrinter().doprint(expr) instead. The problem is that sympy.printing re-exports the pycode function which shadows the module with the same name. However, we can still import the class directly and use it:

import sympy as sy
from sympy.printing.pycode import NumPyPrinter

x = sy.Symbol('x')
y = x * sy.cos(x * sy.pi)

code = NumPyPrinter().doprint(y)

print(code)
# x*numpy.cos(numpy.pi*x)

Upvotes: 1

Related Questions