Передать право собственности на данные

В моемпредыдущий вопросЯ научился изменять размер подклассаndarray на месте. Ухоженная. К сожалению, это больше не работает, когда массив, который я пытаюсь изменить размер, является результатом вычисления:

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)
,

Точный вывод (включая трассировку):

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

Я думаю это потому чтоnumpy создает новыйndarray и передает его__array_prepare__, В какой-то момент на этом пути кажется, чтоoutput"массив получаетна мой взглядFoo тип, хотя документы не кажутся на 100% ясными / точными по этому вопросу. В любом случае, после преобразования представления выходные данные больше не владеют данными, что делает невозможным изменение формы на месте (насколько я могу судить).

Есть ли способ, через какой-то нудистский вуду (__array_prepare__, __array__) и т. д. передать право собственности на данные экземпляру моего подкласса?

Ответы на вопрос(3)

Ваш ответ на вопрос