On Tue, Jun 30, 2009 at 12:26 PM, Nils Wagner <nwag...@iam.uni-stuttgart.de>wrote:
> On Tue, 30 Jun 2009 11:10:39 -0600 > Charles R Harris <charlesr.har...@gmail.com> wrote: > > On Tue, Jun 30, 2009 at 10:56 AM, Charles R Harris < > > charlesr.har...@gmail.com> wrote: > > > >> > >> > >> On Tue, Jun 30, 2009 at 10:40 AM, Nils Wagner < > >> nwag...@iam.uni-stuttgart.de> wrote: > >> > >>> On Tue, 30 Jun 2009 10:27:05 -0600 > >>> Charles R Harris <charlesr.har...@gmail.com> wrote: > >>> > On Tue, Jun 30, 2009 at 5:11 AM, Nils Wagner > >>> > <nwag...@iam.uni-stuttgart.de>wrote: > >>> > > >>> >> On Tue, 30 Jun 2009 11:22:34 +0200 > >>> >> "Nils Wagner" <nwag...@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 Out of curiosity, where did the .5 come from? It is not normally part of the Levi-Civita symbol. Chuck
_______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion