[Numpy-discussion] permutation symbol
Nils Wagner
nwagner at iam.uni-stuttgart.de
Tue Jun 30 14:26:50 EDT 2009
On Tue, 30 Jun 2009 11:10:39 -0600
Charles R Harris <charlesr.harris at gmail.com> wrote:
> On Tue, Jun 30, 2009 at 10:56 AM, Charles R Harris <
> charlesr.harris at gmail.com> wrote:
>
>>
>>
>> On Tue, Jun 30, 2009 at 10:40 AM, Nils Wagner <
>> nwagner at iam.uni-stuttgart.de> wrote:
>>
>>> On Tue, 30 Jun 2009 10:27:05 -0600
>>> Charles R Harris <charlesr.harris at gmail.com> wrote:
>>> > On Tue, Jun 30, 2009 at 5:11 AM, Nils Wagner
>>> > <nwagner at iam.uni-stuttgart.de>wrote:
>>> >
>>> >> On Tue, 30 Jun 2009 11:22:34 +0200
>>> >> "Nils Wagner" <nwagner at 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
More information about the NumPy-Discussion
mailing list