On Tue, Jan 22, 2013 at 1:44 PM, Sebastian Berg
Hey,
On Tue, 2013-01-22 at 10:21 +0100, Todd wrote:
The main exception I have found is concatenate (and hstack/vstack, which just wrap concatenate). In this case, __array_finalize__ is passed an array that has already been stripped of the additional attributes, and I don't see a way to recover this information.
There are quite a few functions that simply do not preserve subclasses (though I think more could/should call `__array_wrap__` probably, even if the documentation may say that it is about ufuncs, there are some example of this already). `np.concatenate` is one of these. It always returns a base array. In any case it gets a bit difficult if you have multiple input arrays (which may not matter for you).
I don't think this is right. I tried it and it doesn't return a base array, it returns an instance of the original array subclass.
In my particular case at least, there are clear ways to handle corner cases (like being passed a class that lacks these attributes), so in principle there no problem handling concatenate in a general way, assuming I can get access to the attributes.
So is there any way to subclass ndarray in such a way that concatenate can be handled properly?
Quite simply, no. If you compare masked arrays, they also provide their own concatenate for this reason.
I hope that helps a bit...
Is this something that should be available? For instance a method that provides both the new array and the arrays that were used to construct it. This would seem to be an extremely common use-case for array subclasses, so letting them gracefully handle this would seem to be very important.