Как заменить символ для матрицы с помощью symPy и numPy
Я пытаюсь заменить два символа в моем уравнении матричной формой каждого из них.
Я создал функцию коммутатора, которая сформировала мое выражение:
t, vS, = sy.symbols('t, vS', commutative = False)
hS = t + vS
eta = myComm(t,hS)
dHs = myComm(eta,hS)
print dHs.expand()
давая правильное выражение, которое я хочу:
2*t*vS*t + t*vS**2 - t**2*vS - 2*vS*t*vS - vS*t**2 + vS**2*t
Итак, теперь я хочу заменить символы t и vS матрицами, однако при использовании subs я получаю ошибку "unhashable type: 'list' " я предполагаю, что это связано с моей инициализацией матриц или с тем, как они должны быть правильно заменить как я новичок в numpy и symPy.
остальная часть кода:
tRel = ([e0, 0],[0,e1])
vtmp = ([v0, v1],[v2,v3])
dHs = dHs.subs(t, tRel)
dHs = dHs.subs(vS, vtmp)
print dHs
1 ответов
возможно использовать lambdify:
import sympy as sy
import numpy as np
from sympy.abc import x, y
z = ((x+y)**2).expand()
print(z)
# x**2 + 2*x*y + y**2
X = np.arange(6).reshape(2,3)
Y = np.arange(1,7).reshape(2,3)
f = sy.lambdify((x, y), z, 'numpy')
print(f(X, Y))
# [[ 1 9 25]
# [ 49 81 121]]
assert np.allclose(f(X, Y), (X**2 + 2*X*Y + Y**2))