[Numpy-discussion] problems with multiple outputs with numpy.nditer

George Nurser gnurser@gmail....
Wed Aug 10 05:45:52 CDT 2011

I'm running numpy 1.6.1rc2 + python 2.7.1 64-bit from python.org on OSX 10.6.8.

I have a f2py'd fortran routine that inputs and outputs fortran real*8
scalars, and I normally call it like

tu,tv,E,El,IF,HF,HFI = LW.rotate2u(u,v,NN,ff,0)

I now want to call it over 2D arrays UT,VT,N,f

Using steam-age indexing works fine:

mflux_east,mflux_north,IWE,IWE_lin,InvFr,HFroude =
for j in range(ny-1):
   for i in range(nx):
       u,v,NN,ff = [x[j,i] for x in UT,VT,N,f]
= LW.rotate2u(u,v,NN,ff,0)

I decided to try the new nditer option, with

it = np.nditer([UT,VT,N,f,None,None,None,None,None,None,None]
for (u,v,NN,ff,tu,tv,E,El,IF,HF,HFI) in it:
   tu,tv,E,El,IF,HF,HFI = LW.rotate2u(u,v,NN,ff,0)

Unfortunately this doesn't seem to work. Writing
aa,bb,cc,dd,ee,ff,gg = it.operands[4:]

aa seems to contain the contents of UT (bizarrely rescaled to lie
between 0 and 1), while bb,cc etc are all zero.

I'm not sure whether I've just called it incorrectly, or whether
perhaps it's only supposed to work with one output array.

--George Nurser.

More information about the NumPy-Discussion mailing list