我正在处理一堆大的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啊,我明白了。我没有从这个问题中得到答案,但正如我所说,我以为我错过了一些东西!感谢澄清 –