Сочетание Numpy с Sympy

У меня есть следующий код:

<code>p = classp();
for i in range(1,10):
   x = numpy.array([[2],[4],[5]])
   print p.update(x)

class classp:
   def __init__(self):
       self.mymodel = array([2*x[1]], [3*x[0]], [x[2]]);
   def update(self, x):
       return self.mymodel #replace x(0)...x(1) with the given parameter
</code>

Мой вопрос связан с приведенным выше кодом, я хотел бы определить модель, используя sympy, если это возможно, после этого в функции обновления замените переменные sympy значениями x. Является ли это возможным? Как я могу это сделать?

Ответы на вопрос(1)

Решение Вопроса

Во-первых, естьDeferedVector который был создан для использования сlambdify:

In [1]: from sympy.matrices import DeferredVector

In [2]: v = DeferredVector('v')

In [3]: func = lambdify(v, Matrix([v[1], 2*v[2]]))

In [4]: func(np.array([10,20,30]))
Out[4]: 
       [[20] 
        [60]]

Однако lambdify делает слишком много магии на мой вкус.

Другой вариант заключается в использовании.subs метод:

In [11]: x1, x2, x3 = symbols('x1:4')

In [12]: m = Matrix([x2,2*x1,x3/2])

In [13]: m.subs({x1:10, x2:20, x3:30})
Out[13]: 
        ⎡20⎤
        ⎢  ⎥
        ⎢20⎥
        ⎢  ⎥
        ⎣15⎦

Вы можете создать словарь для замены следующим образом:

dict(zip(symbols('x1:4'), your_value_array)).

Не забывайте, что все возвращаемые объекты являются симпозиционными матрицами. Чтобы преобразовать их в массивы NumPy просто использоватьnp.array(the_matrix_in_question) и не забудьте указатьdtypeв противном случае по умолчаниюdtype=object.

 12 апр. 2013 г., 13:14
Он достаточно хорош для простой интерактивной работы, но, например, он был полностью переопределен для модуля построения графиков (но из-за различий и всей унаследованной причудливости новая версия еще не представлена в глобальном пространстве имен). Есть также другие варианты, такие как генерация кода и автоматическая компиляция с C, Fortran и Theano, если вы заинтересованы.
 12 апр. 2013 г., 13:01
@TobiasKienzler, на самом деле мне очень не нравитсяlambdify в его нынешнем состоянии. Это запутанная и непредсказуемая функция, которая даже не имеет четко определенной области применения. Иногда он даже возвращает символические объекты, когда целая точка должна была использоваться для числовых оценок.
 12 апр. 2013 г., 11:28
+1 заlambdify
 12 апр. 2013 г., 13:05
О, это прискорбно :-( Я до сих пор этим не пользовался, но идея, стоящая за этим, звучит действительно здорово ...

Ваш ответ на вопрос