Transferir a propriedade de dados numulados

No meupergunta anterior, Aprendi a redimensionar uma subclassendarray no lugar. Arrumado. Infelizmente, isso não funciona mais quando a matriz que estou tentando redimensionar é o resultado de uma computação:

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)

A saída exata (incluindo traceback) é:

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

Acho que isso é porquenumpy cria um novondarray e passa para__array_prepare__. Em algum momento ao longo do caminho, parece que o "output"matriz ficavista-casted ao meuFoo tipo, embora os documentos não pareçam 100% claros / precisos neste ponto. De qualquer forma, após a exibição, a saída não é mais proprietária dos dados, tornando impossível reformulá-la (até onde eu saiba).

Existe alguma maneira, através de algum voodoo numpy (__array_prepare__, __array__) etc. para transferir a propriedade dos dados para a instância da minha subclasse?

questionAnswers(3)

yourAnswerToTheQuestion