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

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

```Ian Harrison wrote:

>Hello,
>
>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
returned.

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.

cross(A,B,axisa=0,axisb=0,axisc=0)

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.

-Travis

>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.
>
>Thanks,
>Ian
>
>
>-------------------------------------------------------
>This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
>http://sel.as-us.falkag.net/sel?cmd=k&kid3432&bid#0486&dat1642
>_______________________________________________
>Numpy-discussion mailing list
>Numpy-discussion at lists.sourceforge.net
>https://lists.sourceforge.net/lists/listinfo/numpy-discussion
>
>

```