如何使ndarray子类的np.save工作?

埃里克

我希望能够将我的数组子类保存到一个npy文件中,并在以后恢复结果。

就像是:

>>> class MyArray(np.ndarray): pass
>>> data = MyArray(np.arange(10))
>>> np.save('fname', data)
>>> data2 = np.load('fname')
>>> assert isinstance(data2, MyArray)  # raises AssertionError

文档说(强调我的):

该格式明确不需要:

  • [...]
  • 完全处理numpy.ndarray的任意子类。子类将被接受写入,但是仅数组数据将被写入。读取文件后,将创建一个常规的numpy.ndarray对象。该API可用于为特定子类构建格式,但超出了常规NPY格式的范围。

那么有可能使上面的代码不引发AssertionError吗?

hpaulj

我看不到np.save处理数组子类的证据

我试图用保存np.matrix它,然后又得到了ndarray

我试图保存一个np.ma数组,但出现错误

NotImplementedError: MaskedArray.tofile() not implemented yet.

保存由完成np.lib.npyio.format.write_array

_write_array_header()   # save dtype, shape etc

如果dtype使用的是对象pickle.dump(array, fp ...)

否则会的array.tofile(fp)tofile处理写入数据缓冲区。

我认为pickle.dump数组最终会使用np.save,但是我不记得是如何触发的。

我可以例如pickle一个数组,并加载它:

In [657]: f=open('test','wb')
In [658]: pickle.Pickler(f).dump(x)
In [659]: f.close()
In [660]: np.load('test')
In [664]: f=open('test','rb')
In [665]: pickle.load(f)

pickle转储/装载顺序适用于测试np.manp.matrixsparse.coo_matrix案例。因此,这可能是探索自己的子类的方向。

搜索后numpypickle我发现在腌制numpy数组的子类时保留自定义属性答案涉及一个习惯.__reduce__.__setstate__

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何np.ndarray.tobytes为D型“对象”()的工作?

numpy ndarray的子类无法按预期工作

子类化 numpy ndarray 无法正常工作

Core Data中的save方法如何工作?

Grub命令“ save_env”应该如何工作?

np.multiply如何工作?

“from numpy import ndarray”是如何工作的?

isinstance 在 python 中如何为子类工作?

子类中__slots__的继承实际上如何工作?

如何从 Upwork 网站抓取工作类别及其子类别?

子类中的代码在这里如何工作?

带有React或Javascript扩展的子类如何工作?

np.array(或 vstack)列切片如何工作?

火炬/ np einsum在内部如何工作

np.vstack和np.hstack在Python中如何工作?

如何从np.genfromtxt添加的ndarray中删除'b'字符

如何使用@cython装饰器声明np.ndarray类型

Python-如何包装np.ndarray类?

如何在 ndarray 中迭代识别 np.nan 值

当我给出包含两个具有不同形状的ndarray的列表时,np.array()无法正常工作

对象子类投不工作

工作目录如何工作?

Call 函数何时以及如何在 Keras 的模型子类化中工作?

仅子类实现可序列化时序列化如何工作

如何使用在子类上重载的相同方法使工作可变参数方法继承

使用模板参数重载C ++方法:如何使此工作适用于模板子类?

在子类中调用 super() 后的属性查找实际上是如何工作的

如何使用私有成员 Java 创建带有子类的工作超类

就地更改子类“ ndarray”视图