In 0.7.3 you probably have to use something other than ImmutableMatrix. But
yes, upgrading is better.

Aaron Meurer

On Dec 12, 2013, at 9:37 AM, Nicholas Chisholm <[email protected]>
wrote:

Aaron,

Thanks a lot for your help! I was initially using sympy version 0.7.3 and
noticed a matrix type is still output with the code as you have given. Upon
upgrading to 0.7.4, it works perfectly!

Nick

On Tuesday, December 10, 2013 9:05:30 PM UTC-5, Aaron Meurer wrote:
>
> Sure. lambdify has a default set of translations (see
> sympy.utilities.lambdify.NUMPY_TRANSLATIONS to see what they are), but
> you can override them. The best way is to pass in a list for the
> module argument to lambdify, where the first argument is a dictionary
> of custom translations, like
>
> In [35]: import numpy
>
> In [36]: lambdify(x, Matrix([[x, 2], [3, 4]]), [{'ImmutableMatrix':
> numpy.array}, "numpy"])(1)
> Out[36]:
> array([[1, 2],
>        [3, 4]])
>
> (note that ImmutableMatrix should be used because that is what the
> matrix gets converted to before it gets lambdified)
>
> As you can imagine, you can use this functionality to translate SymPy
> objects into whatever objects or functions you want.
>
> Aaron Meurer
>
>
> On Tue, Dec 10, 2013 at 4:55 PM, Nicholas Chisholm
> <[email protected] <javascript:>> wrote:
> > I'm new to sympy (and very impressed with what I can do with it), but
> have
> > been unable to figure something out about converting certain matrix
> > expressions into their "lambda function" form for fast evaluation.
> >
> > I have a sympy matrix containing symbols x, y, and z. If I invoke
> lambdify
> > on this matrix for those symbols, I get a function that returns a numpy
> > matrix (great!). Is it also possible to make it return a numpy array
> (rather
> > than a matrix)? The reason I need this is because my matrix is actually
> a
> > rank-3 tensor when the arguments x,y,z are supplied (which are vectors).
> In
> > other words, I want to supply 3 equally sized vectors to my matrix to
> create
> > an m-by-n-by-k numpy array where my original [sympy] matrix was m-by-n.
> >
> > For example, I could do:
> >>>> fn = lambda x,y: np.array( [ [x+y, x-y], [x-y, y-x] ] )
> >>>> fn(1,2)
> > array([[ 3, -1],
> >        [-1,  1]]) # Gives back original array shape (2x2)
> >>>>
> >>>> arr1 = np.array([1,2,3])
> >>>> arr2 = np.array([4,5,6])
> >>>> fn(arr1, arr2)
> > array([[[ 5,  7,  9],
> >         [-3, -3, -3]],
> >
> >        [[-3, -3, -3],
> >         [ 3,  3,  3]]])
> >>>> fn(arr1, arr2).shape # (2x2x3)
> > (2L, 2L, 3L)
> >
> > I basically want to do the above with a sympy matrix rather than
> explicitly
> > typing the lambda function.
> >
> > Thanks!
> >
> > --
> > You received this message because you are subscribed to the Google
> Groups
> > "sympy" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> an
> > email to [email protected] <javascript:>.
> > To post to this group, send email to [email protected]<javascript:>.
>
> > Visit this group at http://groups.google.com/group/sympy.
> > For more options, visit https://groups.google.com/groups/opt_out.
>
 --
You received this message because you are subscribed to the Google Groups
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an
email to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
For more options, visit https://groups.google.com/groups/opt_out.

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to