Transferencia de propiedad de los datos numpy

En miPregunta anterior, Aprendí a redimensionar un subclasificadondarray en su lugar. Ordenado. Desafortunadamente, eso ya no funciona cuando la matriz que estoy intentando cambiar de tamaño es el resultado de un cálculo:

import numpy as np

class Foo(np.ndarray):
    def __new__(cls,shape,dtype=np.float32,buffer=None,offset=0,
                strides=None,order=None):
        return np.ndarray.__new__(cls,shape,dtype,buffer,offset,strides,order)

    def __array_prepare__(self,output,context):
        print output.flags['OWNDATA'],"PREPARE",type(output)
        return np.ndarray.__array_prepare__(self,output,context)

    def __array_wrap__(self,output,context=None):
        print output.flags['OWNDATA'],"WRAP",type(output)

        return np.ndarray.__array_wrap__(self,output,context)

a = Foo((32,))
#resizing a is no problem
a.resize((24,),refcheck=False)

b = Foo((32,))
c = Foo((32,))

d = b+c
#Cannot resize `d`
d.resize((24,),refcheck=False)

El resultado exacto (incluido el rastreo) es:

True PREPARE <type 'numpy.ndarray'>
False WRAP <class '__main__.Foo'>
Traceback (most recent call last):
  File "test.py", line 26, in <module>
    d.resize((24,),refcheck=False)
ValueError: cannot resize this array: it does not own its data

Creo que esto es porquenumpy crea un nuevondarray y se lo pasa a__array_prepare__. En algún punto del camino, sin embargo, parece que el "output"matriz obtienevista a miFoo tipo, aunque los documentos no parecen ser 100% claros / precisos en este punto. En cualquier caso, después de la conversión de la vista, la salida ya no posee los datos, por lo que es imposible remodelarlos en el lugar (por lo que puedo decir).

¿Hay alguna manera, a través de algún tipo de vudú entumecido (__array_prepare__, __array__) etc. para transferir la propiedad de los datos a la instancia de mi subclase?

Respuestas a la pregunta(3)

Su respuesta a la pregunta