Zachowanie widoku numpy podczas wytrawiania

Domyślnie, trawienie tablicy widoków numpy powoduje utratę relacji widoku, nawet jeśli baza tablicowa jest także piklowana. Moja sytuacja jest taka, że ​​mam kilka złożonych obiektów kontenerowych, które są marynowane. W niektórych przypadkach niektóre zawarte dane są widokami w innych. Zapisywanie niezależnej tablicy każdego widoku to nie tylko utrata miejsca, ale także przeładowane dane utraciły relację widoku.

Prostym przykładem może być (ale w moim przypadku kontener jest bardziej złożony niż słownik):

import numpy as np
import cPickle

tmp = np.zeros(2)
d1 = dict(a=tmp,b=tmp[:])    # d1 to be saved: b is a view on a

pickled = cPickle.dumps(d1)
d2 = cPickle.loads(pickled)  # d2 reloaded copy of d1 container

print 'd1 before:', d1
d1['b'][:] = 1
print 'd1 after: ', d1

print 'd2 before:', d2
d2['b'][:] = 1
print 'd2 after: ', d2

który drukowałby:

d1 before: {'a': array([ 0.,  0.]), 'b': array([ 0.,  0.])}
d1 after:  {'a': array([ 1.,  1.]), 'b': array([ 1.,  1.])}
d2 before: {'a': array([ 0.,  0.]), 'b': array([ 0.,  0.])}
d2 after:  {'a': array([ 0.,  0.]), 'b': array([ 1.,  1.])} # not a view anymore

Moje pytanie:

(1) Czy istnieje sposób, aby go zachować? (2) (nawet lepiej) jest sposób na zrobienie tego tylko wtedy, gdy baza jest marynowana

Dla (1) myślę, że może być jakiś sposób, zmieniając__setstate__, __reduce_ex_, etc ... tablicy widoków. Ale na razie nie jestem z nimi pewny. Dla (2) nie mam pojęcia.

questionAnswers(1)

yourAnswerToTheQuestion