У меня есть проблема с использованием sympy.lambdify
. У меня есть довольно простое символическое выражение, включающее только квадратный корень, синус и косинус и некоторые большие числа (которые генерируются другими частями программы, не показанными здесь). Lambdify работает для одиночных операций с плавающей запятой, но не для пустых массивов. Тем не менее, это было бы очень полезно для построения графика позже.
Я получаю ошибку
AttributeError: 'float' object has no attribute 'sqrt'
Вот мве. Обратите внимание, что expr1
работает просто отлично, а expr2
- нет. Любая помощь, чтобы решить эту проблему будет принята с благодарностью.
import sympy
import numpy
x = sympy.symbols('x', real=True)
expr1 = -sympy.sqrt(4*sympy.sin(3*x/4)**2 - 2*sympy.cos(3*x/83) + 5*sympy.cos(2*x/3)**2 + 2)
expr2 = -sympy.sqrt(2.14881349445107e+30*sympy.sin(209178661335919*x/10000000000000)**2 + 13456000000000000000000000000*sympy.cos(209178661335919*x/10000000000000)**2 - 1.40793126300373e+29*sympy.cos(209178661335919*x/10000000000000) + 4.73607234789273e+30)
func1 = sympy.lambdify(x, expr1, modules='numpy')
func2 = sympy.lambdify(x, expr2, modules='numpy')
array = numpy.arange(2)
print(func1(array))
print(func2(array[0]))
print(func2(array[1])) #works fine until here
print(func2(array)) #fails
питон 3.7.3
numpy 1.16.3
Симпи 1.14
EDIT:
Я не могу напрямую изменить expr2
. Это только появляется здесь в этой форме, чтобы предоставить mwe. Однако в реальном коде он генерируется как собственное значение матрицы и вычисляется довольно долго.
eigenvalues = Matrix.eigenvals()
expr2 = list(eigenvalues.keys())[0]