# [Numpy-discussion] permutation symbol

Charles R Harris charlesr.harris@gmail....
Tue Jun 30 13:48:54 CDT 2009

On Tue, Jun 30, 2009 at 12:26 PM, Nils Wagner
<nwagner@iam.uni-stuttgart.de>wrote:

> 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
>

Yep, that's writing it out explicitly.

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/numpy-discussion/attachments/20090630/fbbbf166/attachment.html