[Numpy-discussion] permutation symbol

David Goldsmith d_l_goldsmith@yahoo....
Tue Jun 30 13:30:51 CDT 2009


Great, Nils!  Now, can you generalize it to N-D for us? ;-)

DG

--- On Tue, 6/30/09, Nils Wagner <nwagner@iam.uni-stuttgart.de> wrote:

> From: Nils Wagner <nwagner@iam.uni-stuttgart.de>
> Subject: Re: [Numpy-discussion] permutation symbol
> To: "Discussion of Numerical Python" <numpy-discussion@scipy.org>
> Date: Tuesday, June 30, 2009, 11:26 AM
> On Tue, 30 Jun 2009 11:10:39 -0600
>   Charles R Harris <charlesr.harris@gmail.com>
> wrote:
> > On Tue, Jun 30, 2009 at 10:56 AM, Charles R Harris
> <
> > charlesr.harris@gmail.com>
> wrote:
> > 
> >>
> >>
> >> On Tue, Jun 30, 2009 at 10:40 AM, Nils Wagner
> <
> >> nwagner@iam.uni-stuttgart.de>
> wrote:
> >>
> >>> On Tue, 30 Jun 2009 10:27:05 -0600
> >>>  Charles R Harris <charlesr.harris@gmail.com>
> wrote:
> >>> > On Tue, Jun 30, 2009 at 5:11 AM, Nils
> Wagner
> >>> > <nwagner@iam.uni-stuttgart.de>wrote:
> >>> >
> >>> >> On Tue, 30 Jun 2009 11:22:34 +0200
> >>> >>  "Nils Wagner" <nwagner@iam.uni-stuttgart.de>
> wrote:
> >>> >>
> >>> >>>  Hi all,
> >>> >>>
> >>> >>> How can I build the following
> product with numpy
> >>> >>>
> >>> >>> q_i = \varepsilon_{ijk} q_{kj}
> >>> >>>
> >>> >>> where  \varepsilon_{ijk}
> denotes the permutation 
> >>>symbol.
> >>> >>>
> >>> >>> Nils
> >>> >>>
> >>> >>  Sorry for replying to myself.
> >>> >> The permutation symbol is also known
> as the 
> >>>Levi-Civita
> >>> >>symbol.
> >>> >> I found an explicit expression at
> >>> >> http://en.wikipedia.org/wiki/Levi-Civita_symbol
> >>> >>
> >>> >> How do I build the product of the
> Levi-Civita symbol
> >>> >>\varepsilon_{ijk} and
> >>> >> the two dimensional array
> >>> >> q_{kj}, i,j,k = 1,2,3 ?
> >>> >>
> >>> >
> >>> > Write it out explicitly. It essentially 
> >>>antisymmetrizes
> >>> >q and the three off
> >>> > diagonal elements can then be treated as
> a vector.
> >>> >Depending on how q is
> >>> > formed and the resulting vector is used
> there may be
> >>> >other things you can do
> >>> > when you use it in a more general
> expression. If this 
> >>>is
> >>> >part of a general
> >>> > calculation there might be other ways of
> expressing 
> >>>it.
> >>> >
> >>> > Chuck
> >>>
> >>> Hi Chuck,
> >>>
> >>> Thank you for your response.
> >>> The problem at hand is described in a paper by
> Angeles
> >>> namely equation (17c) in
> >>> "Automatic computation of the screw parameters
> of
> >>> rigid-body motions.
> >>> Part I: Finitely-separated positions"
> >>> Journal of Dynamic systems, Measurement and
> Control, 
> >>>Vol.
> >>> 108 (1986) pp. 32-38
> >>>
> >>
> >> You can solve this problem using quaternions also,
> in 
> >>which case it reduces
> >> to an eigenvalue problem. You will note that such
> things 
> >>as PCA are used in
> >> the papers that reference the cited work so you
> can't 
> >>really get around that
> >> bit of inefficiency.
> >>
> > 
> > Here's a reference to the quaternion approach:
> > http://people.csail.mit.edu/bkph/papers/Absolute_Orientation.pdf.
> 
> >You can
> > get the translation part from the motion of the 
> >centroid.
> > 
> > If you are into abstractions you will note that the 
> >problem reduces to
> > minimising a quadratic form in the quaternion 
> >components. The rest is just
> > algebra ;)
> > 
> > Chuck
> 
> It turns out that the product is simply an invariant of a 
> 3 \times 3 matrix.
> 
> from numpy import array, zeros, identity
> from numpy.linalg import norm
> 
> 
> def vect(A):
>      """ linear invariant of a 3 x 3
> matrix """
>      tmp = zeros(3,float)
>      tmp[0] = 0.5*(A[2,1]-A[1,2])
>      tmp[1] = 0.5*(A[0,2]-A[2,0])
>      tmp[2] = 0.5*(A[1,0]-A[0,1])
> 
>      return tmp
> 
> Q = array([[0,0,-1],[-1,0,0],[0,1,0]])
> 
> q = vect(Q)
> print q
>   
> 
> Nils
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
> 


      


More information about the Numpy-discussion mailing list