[Numpy-discussion] Can you enumerate an array?
Chris Barker
Chris.Barker at noaa.gov
Wed Oct 12 08:52:24 CDT 2005
Arnd,
You've written some nice compact code, but it only works for rank-2
arrays. Did you see Travis' solution? I think he's put it (or a C
version, I'm not sure about that) in scipy_base. However, not using flat
is nice, as in Numeric and numarray is sometimes makes a copy, and
sometimes doesn't.
-Chris
Travis Oliphant wrote:
> class ndenumerate(enumerate):
> def __init__(self, arr):
> self.iter = enumerate(arr.flat)
> self.ashape = arr.shape
> self.nd = arr.ndim
> self.tot = arr.size
> self.factors = [None]*(self.nd-1)
> val = self.ashape[-1]
> for i in range(self.nd-1,0,-1):
> self.factors[i-1] = val
> val *= self.ashape[i-1]
>
> def __len__(self):
> return self.tot
>
> def next(self):
> res = self.iter.next()
> indxs = [None]*self.nd
> val = res[0]
> for i in range(self.nd-1):
> indxs[i] = val / self.factors[i]
> val = val % self.factors[i]
> indxs[self.nd-1] = val
> return tuple(indxs), res[1]
--
Christopher Barker, Ph.D.
Oceanographer
NOAA/OR&R/HAZMAT (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception
Chris.Barker at noaa.gov
More information about the Numpy-discussion
mailing list