2024-09-25 08:29:10 发布
网友
我有一个类定义为:
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] = 10,b[0, 0]也将改变为10。 但是,当我加载转储时,我使用cPickle保存这个数组。a和b成为不同的数组。我想知道是否有什么方法使b仍然是a的参照物?你知道吗
a[0] = 10
b[0, 0]
jsonpickle的最新预发行版确实正确地序列化了numpy视图;遗憾的是pickle没有。你知道吗
可以使用__getstate__和__setstate__来控制pickle:
__getstate__
__setstate__
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
jsonpickle的最新预发行版确实正确地序列化了numpy视图;遗憾的是pickle没有。你知道吗
可以使用
__getstate__
和__setstate__
来控制pickle:相关问题 更多 >
编程相关推荐