再帰関数の 1 つでメモリ エラーが発生しました。
def allPaths(self, adjMat, start, stop, flag=[0], walks=[]):
walks = walks + [start]
if start == stop:
return [walks]
loc = 0
flag=flag*len(adjMat)
output = []
for value in adjMat[start]:
if value > 0.0:
if flag[loc] < 3:
flag[loc]+=1
paths = self.allPaths(adjMat, loc, stop, flag, walks)
for k in paths:
output.append(k)
loc += 1
return output
1 つの入力例は問題ありませんが、別の行列でメモリ エラーが発生します。
>>>print test.allPaths([[0.0, 0.9, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0],
[0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.8, .15, .05, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]],0,7)
[[0, 1, 2, 3, 3, 3, 4, 7], [0, 1, 2, 3, 3, 3, 5, 7], [0, 1, 2, 3, 3, 4, 7], [0, 1, 2, 3, 3, 5, 7], [0, 1, 2, 3, 4, 7], [0, 1, 2, 3, 5, 7], [0, 6, 7]]
>>>print test.allPaths([[0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
[0.8, 0.0, 0.0, 0.0, .05, .15, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.9, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0]],0,7)
エラーは「flag=flag*len(adjMat)」の行で発生しているようです。助言がありますか?