У меня есть следующая проблема с sympy на данный момент:
У меня есть символическое выражение типа M = matrix([pi*a, sin(1)*b])
, которое я хочу lambdify
и передать числовому оптимизатору. Проблема заключается в том, что оптимизатору нужна функция для ввода / вывода массивов с фигурами (n,)
и, в частности, НЕ (n,1)
.
Теперь я смог добиться этого с помощью следующего кода (MWE):
import numpy as np
import sympy as sp
a, b = sp.symbols('a, b')
M = sp.Matrix([2*a, b])
f_tmp = sp.lambdify([[a,b]], M, 'numpy')
fun = lambda x: np.reshape( f_tmp(x), (2,))
Теперь, это, конечно, крайне уродливо, поскольку изменение необходимо применять каждый раз, когда fun
оценивается (что может быть МНОГО раз). Есть ли способ избежать этой проблемы? Класс Matrix
по определению всегда 2-мерный. Я пытался использовать класс sympy
MutableDenseNDimArray
, но они не работают в сочетании с lambdify. (символические переменные не распознаются)