On Tue, 2013-01-22 at 13:44 +0100, Sebastian Berg wrote:
Hey,
On Tue, 2013-01-22 at 10:21 +0100, Todd wrote:
I am trying to create a subclass of ndarray that has additional attributes. These attributes are maintained with most numpy functions if __array_finalize__ is used.
You can cover a bit more if you also implement `__array_wrap__`, though unless you want to do something fancy, that just replaces the `__array_finalize__` for the most part. But some (very few) functions currently call `__array_wrap__` explicitly.
Actually have to correct myself here. The default __array_wrap__ causes __array_finalize__ to be called as you would expect, so there is no need to use it unless you want to do something fancy.
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).
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...
Regards,
Sebastian
I have been looking extensively online, but have not been able to find a clear answer on how to do this, or if there even is a way.
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion