On 8/21/07, Timothy Hochberg <[EMAIL PROTECTED]> wrote: > > > > On 8/21/07, Charles R Harris <[EMAIL PROTECTED]> wrote: > > > > > > > > On 8/20/07, Geoffrey Zhu < [EMAIL PROTECTED]> 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. >
I agree. My original post asked for solutions without using two nested for loops because I already know the two for loop solution. Besides, I was hoping that some version of 'outer' will take in a function reference and call the function instead of doing multiplifcation. _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion