Я работаю с множеством больших массивов numpy, и поскольку в последнее время они начали пережевывать слишком много памяти, я хотел заменить их экземплярами numpy.memmap
. Проблема в том, что время от времени мне приходится изменять размеры массивов, и я предпочел бы делать это на месте. Это работало довольно хорошо с обычными массивами, но попытка, что на memmaps жалуется, что данные могут быть разделены, и даже отключение refcheck не помогает.
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 отлично работает. Проблема заключается в том, как отразить эти изменения в объекте массива. Я видел этот обходной путь, но, к сожалению, он не изменяет размер массива на месте. Существует также документация numpy об изменении размера mmaps, но она явно не работает, по крайней мере, с версией 1.8.0. Любые другие идеи, как переопределить встроенные проверки размера?