2016-01-02 12 views
2

См код:Почему не удается захватить рост np.array()?

import objgraph 
import numpy as np 
objgraph.show_growth() 
j = 20 
y = [] 
for i in range(5): 
    for l in range(j): 
     y.append(np.array([np.random.randint(500),np.random.randint(500)])) 
    print 'i:',i 
    objgraph.show_growth() 
    print '___' 
    #objgraph.show_most_common_types(limit=100) 
    j += 1 

результатом является:

i: 1 
wrapper_descriptor 1596 +3 
weakref 625 +1 
dict 870 +1 
method_descriptor 824 +1 
i: 2 
i: 3 
i: 4 

для 2,3 и 4 эпохи, это ничего не показывает растет. Но он должен показать, что число numpy.array растет

+0

Я предполагаю, что вам нужно изучить документацию 'objgraph', чтобы узнать, что она может и не может обнаружить. И сканируйте другие вопросы 'objgraph' SO. Их не так много с помощью приложения «numpy». – hpaulj

ответ

5

Я не так хорошо знаком с objgraph, но я думаю, что эта же проблема относится и к другим инструментам анализа кучи Python, таким как heapy.

Матрицы с объемным изображением реализованы на C, а также их собственные reference counting внутренними вызовами Py_INCREF и Py_DECREF. Таким образом, они не отслеживаются Python garbage collector. Такие инструменты, как heapy и (предположительно) objgraph, используют сборщик мусора Python для отслеживания ссылок на объекты, так что в результате массивы numpy невидимы для них.