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

Gary Ruben gruben at bigpond.net.au
Wed Feb 15 18:04:02 CST 2006

```This *almost* does what you want, I think. I can't see a neat way to
give column vectors in the solution:

In [21]: a=array([[[1],[2],[3]],[[4],[5],[6]],[[7],[8],[9]]])

In [22]: b=array([[[1],[2],[4]],[[4],[5],[7]],[[7],[8],[10]]])

In [24]: cross(a.transpose(),b.transpose())
Out[24]:
array([[[ 2, -1,  0],
[ 5, -4,  0],
[ 8, -7,  0]]])

Gary R.

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

```