On Thu, Jul 15, 2010 at 11:32 AM, Emmanuel Bengio <beng...@gmail.com> wrote:

> >Could you place all Rot's into the same array and all the Trans's into the
> same array?
> Well I guess since they're all the same size. I would just have to do
> array(a). But the result of the dot product of two 3d arrays is most
> unexpected:
> >>> a = numpy.ones((4,5,6))
> >>> a = numpy.ones((10,4,4))
> >>> b = numpy.ones((10,4,4))
> >>> c = numpy.dot(a,b)
> >>> c.shape
> (10, 4, 10, 4) #Hmm, not what a newbie expects D:
>
>
> >Yes, there is a trick for this using a multiply with properly placed
> newaxis followed by a sum. It uses more memory but for stacks of small
> arrays that shouldn't matter. See the post 
> here<http://thread.gmane.org/gmane.comp.python.numeric.general/20360/focus=21033>.
>
> Hmm, I'm not sure I understand what is being done there.
>
>
>
It's just matrix multipy considered as a sum of the outer products of column
and row vectors, i.e., outer product of first column in first matrix and
first row in second matrix plus outer product of second column in first
matrix plus second row in second matrix, etc. That form is easily adapted to
stacks of matrices and is sometimes used on vector architectures, see Golub
and Van Loan.

In [6]: a = ones((10,4,4))

In [7]: b = ones((10,4,4))

In [8]: sum(a[...,:,:,newaxis]*b[...,newaxis,:,:], axis=-2)
Out[8]:
array([[[ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.]],

       [[ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.]],

       [[ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.]],

       [[ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.]],

       [[ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.]],

       [[ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.]],

       [[ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.]],

       [[ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.]],

       [[ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.]],

       [[ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.],
        [ 4.,  4.,  4.,  4.]]])

<snip>

Chuck
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to