Как освободить память, выделенную для вложенных массивов numpy? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть супер-огромный массив, память, выделенная для него, никогда не становится свободной снова. Я просто демонстрирую свою ситуацию, чтобы вы сами могли увидеть проблему.

Память, выделенная для простых числовых массивов, будет немедленно освобождена после того, как эта переменная может быть удалена (как показано ниже, я ее удаляю):

import numpy as np

X = np.ones((40000, 40000))

X.nbytes
12800000000

del(X)

Когда я запускаю приведенный выше код, все 12 ГБ памяти немедленно освобождаются. Но в случае с вложенными массивами numpy все становится сложнее:

import numpy as np
import random

foo = np.array([np.array([np.ones((256,)) for j in range(random.randint(100, 150))]) for i in range(40000)])

sum(f.nbytes for f in foo)
10240481280

del(foo)

Теперь 10 ГБ памяти никогда не освободятся, даже если вы запустите gc.collect() явно. Ребята, у вас есть какие-либо подсказки?

P.S : env: Ubuntu + Python 2.7 + numpy 1.15.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...