2016-08-11 60 views
0

我正在写一个具有numpy数组类型的属性的类。 因为我想它是只读的,我把它WRITABLE标志是假的:numpy阵列标志信息不会保存当倾销泡菜

import numpy as np 
class MyClass: 
    def __init__(self): 
     self.my_array = np.zeros(5) 
     self.my_array.setflags(write=False) 

做一些其他的东西,我倾倒MyClass的成咸菜文件:

pickle.dump(self, writer) 

稍后,我使用x = pickle.load(reader)加载它,但随后WRITABLE标志为true。 我该如何让pickle dump来保存numpy数组的WRITABLE标志?

+0

见你的构造,只有当您创建对象的实例运行。你怎么知道它没有设置标志? – Kasramvd

+0

标志不被保留并不奇怪,因为它们中的大多数代表酸洗/取出过程不能保留的属性。例如,C_CONTIGUOUS和OWNDATA。 – user2357112

回答

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?