如何使用python查找矩阵中平方的最大和

时间:2018-11-21 19:00:59

标签: python function matrix

我正在尝试编写一个代码,该代码将为我提供矩阵中最大的平方和。

请注意:在形成正方形形状时,这些值必须彼此相邻。

注释2:我只允许使用函数,而我正在上的课目前不允许导入任何内容。

例如:

 max_mat_square([[1,2.5,3],
                 [4,-4,6],
                 [0.5,-1,5]])

[7.5]

现在这是我的代码:

def max_mat_square(mat):
    sum1 = []
    for i in range(len(mat[:-1])):
        print i
        for j in range(len(mat[1:])):
                print 'index' , j
                sum1.append([float(mat[i][j]) + float(mat[i+1][j])+float(mat[i][j+1])+float(mat[i+1][j+1])])
    return max(sum1)

现在代码在第一个示例中运行良好,但是,每当我运行此矩阵时,都将其抛出:

max_mat_square([[1,2], [3,4], [5,6]])

我收到“列表索引超出范围”错误, 我想要此矩阵的结果是18。

我尝试了很多方法来纠正该错误,但没有一个起作用。

2 个答案:

答案 0 :(得分:1)

问题出在内部for循环中。您应该让j从0开始到行的倒数第二个索引:

for j in range(len(mat[i][:-1])):
    ...

因此,您的最终功能将变为:

def max_mat_square(mat):
    sum1 = []
    for i in range(len(mat[:-1])):
        print(i)
        for j in range(len(mat[i][:-1])):
                print('index' , j)
                sum1.append([float(mat[i][j]) + float(mat[i+1][j])+float(mat[i][j+1])+float(mat[i+1][j+1])])
    return max(sum1)

答案 1 :(得分:1)

由于矩阵的形状,我认为您的第一个示例只能同时出现。当前,该循环中使用的切片意味着您正在从第二个子列表中选择结尾:

mat[1:]
>> [[3,4], [5,6]]

这意味着您将尝试使用range(2)遍历每个元素,而这些元素将超出范围。

更改第二个for语句,如下所示:

def max_mat_square(mat):
    sum1 = []
    for i in range(len(mat[:-1])):
        for j in range(len(mat[i])-1):
            print (i , j)
            sum1.append([float(mat[i][j]) + float(mat[i+1][j])+float(mat[i][j+1])+float(mat[i+1][j+1])])
    return max(sum1)