[Numpy-discussion] Help with the tensordot function?

Rick Muller rpmuller at gmail.com
Tue Sep 7 16:14:11 EDT 2010


Ondrej,

I was confused an unclear in my original question. I subsequently posted a
followup, titled "Simplified question on tensordot' where I explained myself
a lot better, and got some really good help. So, thank you very much for
looking into this issue, but I believe that this has been resolved.

Thanks!

Rick

http://mail.scipy.org/pipermail/numpy-discussion/2010-September/052584.html

On Tue, Sep 7, 2010 at 1:23 PM, Ondrej Certik <ondrej at certik.cz> wrote:

> Hi Rick!
>
> On Fri, Sep 3, 2010 at 4:02 AM, Rick Muller <rpmuller at gmail.com> wrote:
> > Can someone help me replace a slow expression with a faster one based on
> > tensordot? I've read the documentation and I'm still confused.
> >
> > I have two matrices b and d. b is n x m and d is m x m. I want to replace
> > the expression
> >
> >>>> bdb = zeros(n,'d')
> >>>> for i in xrange(n):
> >>>>     bdb[i,:] = dot(b[i,:],dot(d,b[i,:])
>
> I am first trying to reproduce this --- the above is missing one ")"
> and also dot() seems to produce a number, but you are assigning it to
> bdb[i,:], also you declare bdb as a 1D array. So I tried this:
>
> http://gist.github.com/568879/
>
> >
> > with something that doesn't have the for loop and thus is a bit faster.
> >
> > The first step is
> >
> >>>> bd = dot(b,d)
> >
> > However, following this with
> >
> >>>> bdb = dot(bd,b.T)
> >
> > doesn't work, since it yields a n x n matrix instead of an n x 1 vector.
> > Reading the notes on tensordot makes me think it's the function to use,
> but
> > I'm having trouble grokking the axes argument. Can anyone help?
>
> In the above gist, I did the following:
>
>
> bd = dot(b, d)
> bdb = diag(dot(bd, b.T))
> print bdb
>
>
> which printed the same as:
>
>
> for i in xrange(n):
>     bdb[i] = dot(b[i,:], dot(d, b[i, :]))
> print bdb
>
>
> but I think that this is not what you want, is it? I think you want to
> do something like:
>
> b * d * b.T
>
> but since b is a (n, m) matrix, the result is a matrix, not a vector,
> right?
>
> Ondrej
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>



-- 
Rick Muller
rpmuller at gmail.com
505-750-7557
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20100907/b67baf2e/attachment.html>


More information about the NumPy-Discussion mailing list