On Tue, May 5, 2009 at 9:28 AM, Jason Grout <jason-s...@creativetrax.com> wrote:
>
> Paul Zimmermann wrote:
>>        Hi,
>>
>> I got the following error in a Sage program I wrote:
>>
>> TypeError: unsupported operand parent(s) for '*': 'Full MatrixSpace of 2 by 
>> 1 dense matrices over Integer Ring' and 'Full MatrixSpace of 2 by 2 dense 
>> matrices over Rational Field'
>>
>> for the following instruction:
>>
>> --> 152     vA = v.transpose() * invA
>>
>> Here, v is a vector of dimension n, and invA is a n x n matrix.
>>
>> In mathematics, a vector of dimension n is usually considered as a n x 1
>> matrix, thus to multiply it to the left of a n x n matrix, one has first
>> to transpose it.
>>
>> sage: m = matrix(SR,[[a,b],[c,d]]); m
>>
>> [a b]
>> [c d]
>>
>> sage: v = vector(SR, [d,e]); v
>> (d, e)
>>
>> sage: m * v
>> (a*d + e*b, c*d + e*d)
>>
>> sage: v.transpose() * m
>> ---------------------------------------------------------------------------
>> TypeError                                 Traceback (most recent call last)
>>
>> /users/cacao/zimmerma/.sage/temp/patate.loria.fr/9803/_users_cacao_zimmerma_Adm_Cacao_ANC_Hadamard_algo2_sage_6.py
>>  in <module>()
>>
>> /usr/local/sage-3.4-core2/sage/local/lib/python2.5/site-packages/sage/structure/element.so
>>  in sage.structure.element.Matrix.__mul__ (sage/structure/element.c:11263)()
>>
>> /usr/local/sage-3.4-core2/sage/local/lib/python2.5/site-packages/sage/structure/coerce.so
>>  in sage.structure.coerce.CoercionModel_cache_maps.bin_op 
>> (sage/structure/coerce.c:5848)()
>>
>> TypeError: unsupported operand parent(s) for '*': 'Full MatrixSpace of 2 by 
>> 1 dense matrices over Symbolic Ring' and 'Full MatrixSpace of 2 by 2 dense 
>> matrices over Symbolic Ring'
>>
>> but v * m works:
>>
>> sage: v * m
>> (a*d + e*c, b*d + e*d)
>
> When you just do v*m or m*v, m acts on the vector in the "obvious" way
> (i.e., in v*m, v is considered a row vector, while in m*v, v is
> considered a column vector).  For me, that means I often do not have to
> think about "row" versus "column" vectors.
>
> To further explain William's post:
>
> matrix(v) gives a 1xn matrix (so vectors are naturally row vectors)
>
> v.transpose() is the same as matrix(v).transpose(), giving an nx1 matrix
>
> I wish vectors were considered column vectors, but I think it's probably
> too late to change that.  The issue has come up before, and I imagine it
> will come up again.  This issue also affects the kernel, nullspace, and
> other functions (which are all left kernels, left nullspaces, etc.).
> Some people are working on making these functions explicit (i.e.,
> left_kernel/right_kernel, left_nullspace/right_nullspace, etc.).

The explicit forms like that are very nice.    I try to always use
them now, and really like them.  I think they make code very readable.

>
> However, having m*v work as if v was a column vector takes care a lot of
> my complaints on this issue.  Having right_* functions for everything
> will take care of most of the rest of my complaints.

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to