Как объяснил hpaulj в комментариях, SymPy и NumPy живут в разных мирах. Если вам нужно быстрое сокращение чисел, NumPy - ваш герой. SymPy сияет в символических манипуляциях. Чтобы перейти от SymPy к NumPy, вы должны либо преобразовать все в числа в SymPy, прежде чем передать его в NumPy. Или вы используете lambdify
, который преобразует выражения SymPy в функции NumPy.
См., Например, этот пост , как SymPy вычисляет производные очень сложных выражений, которые затем преобразуются в функции NumPy.
Если вам действительно нужна скорость, библиотека, такая как Numba , может преобразовывать функции NumPy в машинный код (без необходимости внешних шагов компиляции).
Эти библиотеки очень мощные по своемусобственный, но не обладающий достаточной функциональной совместимостью, что может поначалу сбивать с толку.
Ваш пример работает, если вы разрешите SymPy работать с каждым элементом списка, а не со списком в целом. SymPy subs
заполняет переменные. evalf
в SymPy преобразует константное выражение в числа (потому что обычно SymPy хранит, например, рациональные числа и sqrt в символической форме, поэтому сохраняет максимальную точность).
import sympy as sp
import numpy as np
x = sp.symbols('x')
b = [x , 2*x]
c = [expr.subs(x, 5).evalf() for expr in b]
a = np.array(c)