我正在编写一个具有numpy数组类型属性的类。因为我希望它是只读的,所以我将它的WRITABLE标志设置为false:
import numpy as np
class MyClass:
def __init__(self):
self.my_array = np.zeros(5)
self.my_array.setflags(write=False)
在做了一些其他的事情之后,我将MyClass转储到一个pickle文件中:
pickle.dump(self, writer)
之后,我使用x = pickle.load(reader)
加载它,但是WRITABLE标志为真。我如何使pickle转储保留numpy数组WRITABLE标志?
对于pickle数组,numpy使用np.save
函数。此保存的详细信息在np.lib.format
文件中。此格式保存数据缓冲区的标头和字节表示形式。header的内容是一个字典。
In [1212]: np.lib.format.header_data_from_array_1_0(x)
Out[1212]: {'descr': '<i4', 'fortran_order': False, 'shape': (2, 3)}
In [1213]: np.lib.format.header_data_from_array_1_0(u)
Out[1213]: {'descr': '<c16', 'fortran_order': False, 'shape': (4,)}
您可以看到,它不保存整个FLAGS
属性,只保存有关订单的信息。
类酸洗可自定义__reduce__
和__setstate__
方法。
参见
如何使np。保存工作为一个narray子类?