在Python中实现Strassen算法的困难

2021-04-11 23:00:07 发布

您现在位置: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]],并将{}还原为{},但我得到了一个错误:

^{pr2}$

a和{}是第一个2x2矩阵,它们将在A和B的第二次全矩阵除法之后形成。请有人给我解释一下。谢谢

1条回答
网友
1楼 ·

递归终止条件中没有返回值。当我运行你的代码时,它会在给出错误之前打印“will calculate”。在这之后发生错误,因为在最后一次调用(当lengthA == 2)时,strassen函数没有返回值。在

相关问题