转储到pickle时不保存Numpy数组标志信息



我正在编写一个具有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子类?

最新更新