передача символьной матрицы в sympy.lambdify

Я хочу создать функцию символьной матрицы в sympy, а затем ламбдифицировать ее для оценки в numpy. Давайте попробуем простую функцию, которая возвращает именно то, что я ей подаю, f(x) = x, но в конечном итоге я хотел бы сделать что-то вроде следа матрицы или что-то более причудливое.

Это нормально, когда 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)

Спасибо за любые идеи или рекомендации!


person V7sharp9    schedule 09.07.2014    source источник
comment
Я бы сказал, что это ошибка. Вы можете открыть задачу на странице github.com/sympy/sympy/issues/new.   -  person asmeurer    schedule 13.07.2014
comment
autowrap может уже поддерживать то, что вы хотите. Вот тест, показывающий трассировку: github. com/sympy/sympy/blob/   -  person moorepants    schedule 20.10.2014


Ответы (1)


Вот хитрый лайфхак. 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
person Sean Vonaffeunternehmen    schedule 08.12.2014