[Numpy-discussion] cross product of two 3xn arrays

Travis Oliphant oliphant.travis at ieee.org
Wed Feb 15 19:16:04 EST 2006

Ian Harrison wrote:

>I have two groups of 3x1 arrays that are arranged into two larger 3xn
>arrays. Each of the 3x1 sub-arrays represents a vector in 3D space. In
>Matlab, I'd use the function cross() to calculate the cross product of
>the corresponding 'vectors' from each array. In other words:

Help on function cross in module numpy.core.numeric:

cross(a, b, axisa=-1, axisb=-1, axisc=-1)
    Return the cross product of two (arrays of) vectors.

    The cross product is performed over the last axis of a and b by default,
    and can handle axes with dimensions 2 and 3. For a dimension of 2,
    the z-component of the equivalent three-dimensional cross product is

It's the axisa, axisb, and axisc  that you are interested in.

The default is to assume you have Nx3 arrays and return an Nx3 array.  
But you can change the axis used to find vectors.


will do what you want.  I suppose, a single axis= argument might be 
useful as well for the common situation of having all the other axis 
arguments be the same.


>if ai and bj are 3x1 column vectors:
>A = [ a1  a2  a3 ]
>B = [ b1  b2  b3 ]
>C = A x B = [ (a1 x b1)  (a2 x b2)  (a3 x b3) ]
>Could someone suggest a clean way to do this? I suppose I could write
>a for loop to cycle through each pair of vectors and send them to
>numpy's cross(), but since I'm new to python/scipy/numpy, I'm guessing
>that there's probably a better method that I'm overlooking.
>This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
>for problems?  Stop!  Download the new AJAX search engine that makes
>searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
>Numpy-discussion mailing list
>Numpy-discussion at lists.sourceforge.net

More information about the NumPy-Discussion mailing list