Przenieś własność danych numpy

W moimpoprzednie pytanie, Nauczyłem się zmieniać rozmiar podkategoriindarray w miejscu. Schludny. Niestety, to już nie działa, gdy tablica, której próbuję zmienić rozmiar, jest wynikiem obliczeń:

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)

Dokładne dane wyjściowe (w tym traceback) to:

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

Myślę, że tak jestnumpy tworzy nowyndarray i przekazuje to__array_prepare__. W pewnym momencie jednak wydaje się, że „output„dostaje tablicęrzucony na mójFoo rodzaj, chociaż dokumenty nie wydają się być w tym punkcie w 100% jasne / dokładne. W każdym razie po rzuceniu widoku wyjście nie jest już właścicielem danych, co uniemożliwia zmianę kształtu (o ile wiem).

Czy jest jakiś sposób, za pośrednictwem jakiegoś dziwnego voodoo (__array_prepare__, __array__) itd., aby przenieść własność danych do instancji mojej podklasy?

questionAnswers(3)

yourAnswerToTheQuestion