3
我寫了一個遞歸函數,詳盡地生成某些特徵的矩陣。 功能是這樣:佔用太多內存 - 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
而且我知道,功能重組是其中大量的內存吸吮正在發生的事情,我只需要減少它。