On 2/5/07, Pierre GM <[EMAIL PROTECTED]> wrote: > On Monday 05 February 2007 11:32:22 Jeremy Conlin wrote: > > Thanks for clarifying that. I didn't understand what the > > __array_finalize__ did. > > That means I should clarify some points on the wiki, then. > A good exercise is to put some temporary comments in your code in __new__ and > __array_finalize__, to show when these methods are called and how (that's how > I learned) > > Thinking about it, the example you gave can't work. Your __new__ method > returns H, viz, a pure ndarray. There won't be any call to __array_finalize__ > in that case, which is not what you want. Force the call by accessing a view > of your array: > > class myhistog(N.ndarray): > def __new__(self, iniarray, inibin): > (H,edges) = N.histogramdd(iniarray,inibin) > self._defedges = edges > return H.view(self) > > Now, you do return a 'myhistog' class, not a pure 'ndarray', and > __array_finalize__ is called. > > def __array_finalize__(self, obj): > print "__array_finalize__ got %s as %s" % (obj, type(obj)) > if not hasattr(self, 'edges'): > self.edges = self._defedges > myhistog._defedges = None > > Note the last line: you reset the class default to None (if this is what you > want). Otherwise, new 'myhistog' objects wil inherit the previous edges.
Excellent now it does what I want! But it raises more questions. What exactly is a "view" of H? Thanks again, Jeremy _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion