[Numpy-discussion] Using sum() within a function

Jim Cser jimcser at pacifier.com
Sat Aug 14 14:05:03 CDT 2004


Hello-
I have a function to generate a multi-dimensional array, which then
gets summed over one axis.  The problem is that the dimensions
are large, and I run out of memory when I create the entire array,
so I'm trying to do the sum *within* the function.

Example-- variables x,y,z,t; dimensions numX, numY, numZ, numT;
functions f1(x,y,z,t), f2(y,z,t);  want to calculate f1*f2 and
sum over t to get out[x,y,z].

With loops, I could do it like--
out = zeros((numX,numY,numZ))
for x in range(numX):
   for y in range(numY):
     for z in range(numZ):
        for t in range(numT):
           tempval = f1(x,y,z,t) * f2(y,z,t)
           out[x,y,z] = out[x,y,z] + tempval

With numarray, if I had enough memory, I could just do--
temp1 = fromfunction(f1,(numX,numY,numZ,numT))
temp2 = resize(fromfunction(f2,(numY,numZ,numT)),(numX,numY,numZ,numT))
out = sum(temp1 * temp2, axis = 3)

Instead, I'm trying to do something like--
def f3(x,y,z):
   for t in range(numT):
     tempval = f1(x,y,z,t) * f2(y,z,t)

   outval = sum(tempval,axis = 3)
   return outval

out = fromfunction(f3,(numX,numY,numZ))

I've been trying various slicing and indexing, but I can't seem to
get that *extra* dimension within the 3-D function. I've scoured the
documentation and list archives, but haven't found exactly what I need.
Any suggestions?  Am I stuck with generating the entire 4-D array?

Thanks in advance,
Jim Cser





More information about the Numpy-discussion mailing list