2016-08-11 58 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?