[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