我写了一个递归函数,它详尽地生成了某些特征的矩阵。函数是这样的:
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 是一个函数,它只返回具有我需要的特征的矩阵列。
问题是,由于重量级产生了大量的矩阵,它占用了太多的内存。我最终从另一个函数一个接一个地调用它,最终我占用了太多的 RAM,我的进程被杀死了(我在有内存上限的服务器上运行它)。我怎样才能写这个以减少它使用的内存?
该程序看起来像:
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
而且我知道功能很重是发生大量内存吸收的地方,我只需要减少它。