2013-06-03 4 views
6

Ich versuche, zwei Symbole in meiner Gleichung für die Matrixform von jedem von ihnen zu ersetzen.So ersetzen Sie das Symbol für die Matrix mit symPy und numPy

Ich habe eine Kollektor-Funktion, die meinen Ausdruck gebildet:

2*t*vS*t + t*vS**2 - t**2*vS - 2*vS*t*vS - vS*t**2 + vS**2*t 

Ich mag die Symbole t und vS mit Matrizen ersetzen, aber So jetzt:

t, vS, = sy.symbols('t, vS', commutative = False) 
hS = t + vS 

eta = myComm(t,hS) 

dHs = myComm(eta,hS) 
print dHs.expand() 

den richtigen Ausdruck Ich mag nachgebend Bei Verwendung von Subs bekomme ich einen Fehler, "nicht hashbarer Typ: 'list'" Ich gehe davon aus, dass es mit meiner Initialisierung der Matrizen oder wie sie richtig ersetzt werden sollten, da ich sowohl numPy als auch symPy neu bin.

Der Rest des Codes:

tRel = ([e0, 0],[0,e1]) 
vtmp = ([v0, v1],[v2,v3]) 

dHs = dHs.subs(t, tRel) 
dHs = dHs.subs(vS, vtmp) 
print dHs 
+0

Versuchen 'MatrixSymbol' verwenden. – asmeurer

Antwort

4

Vielleicht lambdify verwenden:

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)) 
+0

Das hat perfekt für numerische Matrizen funktioniert! Vielen Dank! Irgendeine Idee, wie man das gleiche Ziel erreichen kann, aber (mit Bezug auf den obigen Code) X und Y bestehen aus Symbolen anstatt aus numerischen Elementen? – faceforest

+0

Verwenden Sie dazu die [subs-Methode] (http://docs.sympy.org/dev/modules/core.html#sympy.core.basic.Basics). – unutbu

Verwandte Themen