2013-06-03 9 views
6

का उपयोग करके मैट्रिक्स के लिए प्रतीक को कैसे प्रतिस्थापित करें I उनमें से प्रत्येक के मैट्रिक्स रूप के लिए मेरे समीकरण में दो प्रतीकों को प्रतिस्थापित करने का प्रयास कर रहा हूं।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 

मैं प्रतीकों टी और बनाम मैट्रिक्स के साथ स्थानापन्न करना चाहते हैं हालांकि, सबस का उपयोग करते समय मुझे एक त्रुटि मिलती है, "अनावश्यक प्रकार: 'सूची'" मुझे लगता है कि इसे मैट्रिक्स के प्रारंभिकरण के साथ करना है या उन्हें ठीक से प्रतिस्थापित किया जाना चाहिए क्योंकि मैं numpy और symPy दोनों के लिए नया हूं।

कोड के बाकी:

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

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

MatrixSymbol' का उपयोग कर 'की कोशिश करो। – asmeurer

उत्तर

4

शायद 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)) 
+0

यह संख्यात्मक matrices के लिए पूरी तरह से काम किया! धन्यवाद! किसी भी विचार को एक ही लक्ष्य को कैसे प्राप्त किया जाए लेकिन साथ ही (ऊपर दिए गए कोड को संदर्भित करना) एक्स और वाई संख्यात्मक तत्वों के बजाय प्रतीकों से बना है? – faceforest

+0

इसके लिए, [subs method] (http://docs.sympy.org/dev/modules/core.html#sympy.core.basic.Basic.subs) का उपयोग करें। – unutbu