[英]Difficulty in implementing Strassen's algorithm in Python
我不明白如何遞歸調用我的代碼。 到目前為止,這是我的代碼:
import numpy
B = [[5,5,5,5,5,5,5,5],[6,6,6,6,6,6,6,6],[7,7,7,7,7,7,7,7],[8,8,8,8,8,8,8,8],
[9,9,9,9,9,9,9,9], [10,10,10,10,10,10,10,10],[11,11,11,11,11,11,11,11], [12,12,12,12,12,12,12,12]]
A = [[5,5,5,5,5,5,5,5],[6,6,6,6,6,6,6,6],[7,7,7,7,7,7,7,7],[8,8,8,8,8,8,8,8],
[1,1,1,1,1,1,1,1], [2,2,2,2,2,2,2,2],[3,3,3,3,3,3,3,3],[4,4,4,4,4,4,4,4]]
def main():
strassen(A,B)
def strassen(A, B):
A = numpy.asarray(A)
B = numpy.asarray(B)
lengthA = len(A)
lengthB = len(B)
if lengthA == 2:
print "will calculate"
else:
a, b = strassen(A[:lengthA//2, :lengthA//2], B[:lengthB//2, :lengthB//2])
lengthA = lengthA//2
lengthB = lengthB//2
print a
print b
return a, b
我試圖減少a
到[[5,5],[6,6]]
和b
到[[5,5],[6,6]]
但我得到一個錯誤:
a, b = strassen(A[:lengthA//2, :lengthA//2], B[:lengthB//2, :lengthB//2])
TypeError: 'NoneType' object is not iterable.
a
和b
是在對A和B進行第二次整個矩陣除法后將形成的第一2x2矩陣。請有人可以向我解釋一下。 謝謝
您的遞歸終止條件中沒有返回值。 當我運行您的代碼時,它會在給出錯誤之前打印“將計算”。 此后發生錯誤,因為在上一次調用時( lengthA == 2
)沒有strassen函數的返回值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.