[Numpy-discussion] "Extended" Outer Product

Timothy Hochberg tim.hochberg@ieee....
Tue Aug 21 12:59:56 CDT 2007


On 8/21/07, Charles R Harris <charlesr.harris@gmail.com> wrote:
>
>
>
> On 8/20/07, Geoffrey Zhu <zyzhu2000@gmail.com> wrote:
> >
> > Hi Everyone,
> >
> > I am wondering if there is an "extended" outer product. Take the
> > example in "Guide to Numpy." Instead of doing an multiplication, I
> > want to call a custom function for each pair.
> >
> > >>> print outer([1,2,3],[10,100,1000])
> >
> > [[ 10 100 1000]
> > [ 20 200 2000]
> > [ 30 300 3000]]
> >
> >
> > So I want:
> >
> > [
> > [f(1,10), f(1,100), f(1,1000)],
> > [f(2,10), f(2, 100), f(2, 1000)],
> > [f(3,10), f(3, 100), f(3,1000)]
> > ]
>
>
> Maybe something like
>
> In [15]: f = lambda x,y : x*sin(y)
>
> In [16]: a = array([[f(i,j) for i in range(3)] for j in range(3)])
>
> In [17]: a
> Out[17]:
> array([[ 0.        ,  0.        ,  0.        ],
>        [ 0.        ,  0.84147098,  1.68294197],
>        [ 0.        ,  0.90929743,  1.81859485]])
>
> I don't know if nested list comprehensions are faster than two nested
> loops, but at least they avoid array indexing.
>

This is just a general comment on recent threads of this type and not
directed specifically at Chuck or anyone else.

IMO, the emphasis on avoiding FOR loops at all costs is misplaced. It is
often more memory friendly and thus faster to vectorize only the inner loop
and leave outer loops alone. Everything varies with the specific case of
course, but trying to avoid FOR loops on principle is not a good strategy.


-- 
.  __
.   |-\
.
.  tim.hochberg@ieee.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.scipy.org/pipermail/numpy-discussion/attachments/20070821/d74333b4/attachment.html 


More information about the Numpy-discussion mailing list