Я написал рекурсивную функцию, которая исчерпывающе генерирует матрицы определенных характеристик. Функция как таковой:Слишком много памяти - python
def heavies(rowSums,colSums,colIndex,matH):
if colIndex == len(colSums) - 1:
for stuff in heavy_col_permutations(rowSums,colSums,colIndex):
matH[:,colIndex] = stuff[0]
yield matH.copy()
return
for stuff in heavy_col_permutations(rowSums,colSums,colIndex):
matH[:,colIndex] = stuff[0]
rowSums = stuff[1]
for matrix in heavies(rowSums,colSums,colIndex+1,matH):
yield matrix
и heavy_col_permutations является функцией, которая просто возвращает столбец матрицы с характеристиками, что нужно, как хорошо.
Проблема заключается в том, что, поскольку тяжелая энергия дает много матриц, она занимает слишком много памяти. В конечном итоге я вызываю это из другой функции один за другим, и в итоге я занимаю слишком много ОЗУ, и мой процесс убит (я запускаю это на сервере с крышками памяти). Как я могу написать это, чтобы использовать меньше памяти?
Программа выглядит примерно так:
r = int(argv[1])
n = int(argv[2])
m = numpy.zeros((r,r),numpy.dtype=int32)
for row,col in heavy_listing(r,n):
for matrix in heavies(row,col,0,m):
# do more stuff with matrix
И я знаю, что функция тяжеловесы, где большое количество сосания памяти происходит, мне просто нужно, чтобы уменьшить его.