[Numpy-discussion] Subclassing ndarray with concatenate
Wed Jan 30 03:24:22 CST 2013
On Tue, Jan 22, 2013 at 1:44 PM, Sebastian Berg
> 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.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the NumPy-Discussion