我正在使用一堆大的numpy数组,由于这些数组最近开始占用太多内存,我想将它们替换为numpy.memmap
实例。问题是,现在和然后我需要调整数组的大小,我更愿意就地执行此操作。这在普通数组上运作得很好,但尝试在memmaps上进行时会抱怨数据可能是共享的,即使禁用了引用检查也无法解决。
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缓冲区的大小完全没有问题。问题在于如何将这些更改反映到数组对象中。我已经看到了这个解决方法,但不幸的是它不能就地调整数组大小。关于调整mmap大小还有一些numpy文档,但显然它并没有起作用,至少在版本1.8.0中是这样。还有其他想法,如何覆盖内置的调整大小检查?