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

时间:2016-08-11 16:50:54

标签: python arrays numpy pickle

我正在编写一个具有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标志为true。 如何使pickle转储保留numpy数组WRITABLE标志?

1 个答案:

答案 0 :(得分:0)

对于酸洗数组,numpy使用np.save函数。此保存的详细信息位于np.lib.format文件中。此格式保存数据缓冲区的标头和字节表示。标题的内容是字典。

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__方法自定义类别腌制。

另见

How can I make np.save work for an ndarray subclass?