
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