我正在處理一堆大的numpy數組,並且由於最近這些數組開始咀嚼太多內存,我想用numpy.memmap
實例替換它們。問題是,現在,我不得不調整數組的大小,我最好做到這一點。這對普通數組來說效果很好,但是在memmaps上試着抱怨,可能會共享數據,甚至禁用refcheck也無濟於事。調整numpy.memmap數組的大小
a = np.arange(10)
a.resize(20)
a
>>> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
a = np.memmap('bla.bin', dtype=int)
a
>>> memmap([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
a.resize(20, refcheck=False)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-41-f1546111a7a1> in <module>()
----> 1 a.resize(20, refcheck=False)
ValueError: cannot resize this array: it does not own its data
調整底層mmap緩衝區的大小非常好。問題是如何將這些更改反映到數組對象。我已經看到這個workaround,但不幸的是它沒有調整陣列的大小。還有一些關於調整mmap大小的numpy documentation,但它顯然不起作用,至少在1.8.0版本中是這樣。任何其他想法,如何覆蓋內置的大小調整檢查?
我覺得我必須失去了一些東西......這個代碼運行對我罰款。它會爲你運行嗎?這不是你想要做的嗎? http://codepad.org/eEWmYBHZ –
@three_pineapples他想改變數組的總大小 - 你的代碼只是重塑它的形狀 –
@ali_m啊,我明白了。我沒有從這個問題中得到答案,但正如我所說,我以爲我錯過了一些東西!感謝澄清 –