cPickle能否保存重塑的numpy对象引用?

2024-09-25 08:29:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类定义为:

class A():
    def __init__():
        self.a = np.array([0,1,2,3,4,5])
        self.b = self.a.reshape((2, 3))

现在,b实际上是数组a的一个重塑的引用。如果我们改变a的第一个元素:a[0] = 10b[0, 0]也将改变为10。 但是,当我加载转储时,我使用cPickle保存这个数组。a和b成为不同的数组。我想知道是否有什么方法使b仍然是a的参照物?你知道吗


Tags: 方法self元素定义initdefnp数组
2条回答

jsonpickle的最新预发行版确实正确地序列化了numpy视图;遗憾的是pickle没有。你知道吗

可以使用__getstate____setstate__来控制pickle:

import numpy as np

class A:
    def __init__(self):
        self.a = np.array([0,1,2,3,4,5])
        self.b = self.a.reshape((2, 3))

    def __getstate__(self):
        return {"a":self.a, "b":self.b.shape}

    def __setstate__(self, state):
        self.a = state["a"]
        self.b = self.a.reshape(state["b"])

import pickle

x = A()
s = pickle.dumps(x)
y = pickle.loads(s)

y.b.base is y.a

相关问题 更多 >