2014-07-09 2 views
3

sympy에서 기호 행렬 함수를 만들고 numpy로 평가하기 위해 lambdify하고 싶습니다. 내가 f (x) = x를 먹이는 것과 똑같은 것을 반환하는 간단한 함수를 시도해 보겠습니다. 그러나 결국에는 행렬의 흔적을 취하거나 무언가를 좋아하는 것을 좋아합니다.sympy.lambdify에 상징적 행렬 전달

x는 sympy.Symbol 때 그것은 괜찮아요 :

import sympy as sy 
from sympy import Matrix, MatrixSymbol 

x = sy.Symbol('x') 
f = sy.lambdify(x, x, 'numpy') 
f(Matrix((3,))) # returns Matrix([[3]]) 

그러나 여기서 x는 sympy.MatrixSymbol하지 때

import sympy as sy 
from sympy import Matrix, MatrixSymbol 

x = sy.MatrixSymbol('x', 2, 2) 
f = sy.lambdify(x, x, 'numpy') 
f(Matrix((3,))) # should return Matrix((3,)), right? 

그것은 저에게 말한다 :

lambda() takes no arguments (1 given) 

감사합니다 어떤 아이디어 나 조언을 구하십시오!

+0

나는 이것이 버그라고 말하고 싶습니다. https://github.com/sympy/sympy/issues/new에서 문제를 열 ​​수 있습니다. – asmeurer

+0

autowrap이 이미 원하는 것을 지원할 수 있습니다. 다음은 추적을 보여주는 테스트입니다. https://github.com/sympy/sympy/blob/e8d101572c2a4632427ee7daf937a70b4a124404/sympy/external/tests/test_autowrap.py#L59 – moorepants

답변

0

여기 cludge hack이 있습니다. mySymbol은 문자열을 사용하며 (짧게 유지) n 및 m은 원하는 행렬 크기입니다.

def makeMatrix(mySymbol,n,m):  #makes a lambdafiable matrix 

    myMatrix = zeros(n,m) 

    for i in numpy.arange(n): 
     for j in numpy.arange(m): 
      myStr = mySymbol+"_"+str(i)+"_"+str(j) 

      myMatrix[i,j]=sympify(myStr) 

    return myMatrix