Wenn Sie ein numpy View-Array in die Voreinstellung setzen, wird die View-Beziehung standardmäßig gelöscht, auch wenn die Array-Basis ebenfalls markiert ist. Meine Situation ist, dass ich einige komplexe Containerobjekte habe, die gebeizt werden. Und in einigen Fällen sind einige enthaltene Daten Ansichten in einigen anderen. Das Speichern eines unabhängigen Arrays jeder Ansicht ist nicht nur ein Platzverlust, sondern die neu geladenen Daten haben auch die Sichtbeziehung verloren.
Ein einfaches Beispiel wäre (aber in meinem Fall ist der Container komplexer als ein Wörterbuch):
%Vor%was drucken würde:
%Vor%Meine Frage:
(1) Gibt es eine Möglichkeit, sie zu bewahren? (2) (noch besser) gibt es einen Weg, es nur zu tun, wenn die Basis gebeizt wird
Für die (1) Ich denke, es kann einen Weg geben, indem Sie die __setstate__
, __reduce_ex_
, etc ... des View-Arrays ändern. Aber ich traue mich erst jetzt nicht damit. Für die (2) habe ich keine Ahnung.
Dies wird nicht in NumPy richtig gemacht, da es nicht immer Sinn macht, das Basisarray zu beizen, und Pickle nicht die Möglichkeit bietet, zu überprüfen, ob ein anderes Objekt als Teil seiner API auch gebeizt wird.
Diese Überprüfung kann jedoch in einem benutzerdefinierten Container für NumPy-Arrays durchgeführt werden. Zum Beispiel:
%Vor%Dies führt zu erheblichen Platzeinsparungen:
%Vor%