lambdify可以使用dytpe np.float128返回一个数组吗?

时间:2014-10-08 13:41:15

标签: python numpy sympy

我正在解决一个大的非线性方程组,我需要高度的数值精度。我目前正在使用sympy.lambdify将方程组及其雅可比元素的符号表达式转换为向量化函数,将ndarray作为输入并返回ndarray作为输出。

默认情况下,lambdify返回dtype为numpy.float64的数组。是否可以让它返回一个dtype为numpy.float128的数组?也许这需要输入dtype为numpy.float128

2 个答案:

答案 0 :(得分:1)

如果您需要很多精度,可以尝试使用SymPy浮点数,或直接使用mpmath(这是SymPy的一部分),它提供任意精度。例如,sympy.Float('2.0', 100)创建一个2.0的浮点数,其精度为100位。例如,您可以使用类似sympy.sin(2).evalf(100)的内容来获取100位sin(2)。这将比numpy慢得多,因为它是任意精度,这意味着它不使用机器浮点数,并且它是用纯Python实现的(而numpy是用Fortran和C编写的)。

答案 1 :(得分:0)

输出只反映输入:

from numpy import float128
from sympy.abc import x
from sympy.utilities import lambdify

f = lambdify(x, x ** 2)
result = f(float128(2))

result
#>>> 4.0

type(result)
#>>> <class 'numpy.float128'>