Как интегрировать Sympy и Numpy в Python? Множество симпатичных символов - PullRequest
0 голосов
/ 10 ноября 2019

Допустим, я хочу вектор массива, подобный этому [x, 2x], а затем я хочу вычислить этот массив, когда x = 5. Таким образом, результат становится [5, 10].

Это можно легко сделать в Matlab с помощью символического набора инструментов. Однако я только что перешел с matlab на python, и мне порекомендовали использовать Numpy и Sympy для замены мощных матричных манипуляций Matlab.

Я попробовал следующий код

import numpy as np
import sympy as sp

x=sp.symbols('x')
a=np.array([x , 2*x])

Однако я не смогнайдите любую команду, которую можно использовать для оценки «а», когда х - любое число.

Может кто-нибудь направить меня на правильный путь, пожалуйста.

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Как объяснил 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)
0 голосов
/ 10 ноября 2019
In [41]: from sympy import Matrix                                               

In [42]: m = Matrix([x, 2*x])                                                   

In [43]: m.subs(x,23)                                                           
Out[43]: 
⎡23⎤
⎢  ⎥
⎣46⎦
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...