两个矩阵的总和

时间:2018-03-23 17:37:34

标签: python

我遇到了一个练习,我遇到了问题:

编写一个带有两个输入参数的函数:M1和M2,它们是数组:数字列表列表。如果它们是兼容的,则返回矩阵的总和,否则返回空列表。

例如:

A = [[1, 2, 3], [4, 5, 6]] 
B = [[1, 1, 1], [1, 1, 1]] 

matrix_sum(A, B)

你得到:

[[2, 3, 4], [5, 6, 7]]

所以我试过了:

def matrix_sum(M1, M2):
    while len(M1)==len(M2):
        res = []
        for i in range(len(M1)):
            row = []
            for j in range(len(M1[0])):
                row.append(M1[i][j]+M2[i][j])
            res.append(row)
        return res

它适用于一些输入但是说:

的测试失败
matrix_sum([[1, 2], [2, 3]], [[4, 2, 1], [1, 2, 3]])

预期输出:[]
实际输出:[[5, 4], [3, 5]]

如何更改它才能实现此目的?

3 个答案:

答案 0 :(得分:0)

您的函数仅检查行数量是否匹配;它完全忽略了列。实际上,如果你反转不匹配的参数,你的函数将在索引错误时崩溃。

添加另一张支票:

if len(M1) == len(M2) and \
   len(M1[0]) == len(M2[0]):

答案 1 :(得分:0)

首先收集尺寸,检查它们是否对元素添加有效,然后执行添加。

def matrix_sum(M1, M2):
    dim_m1, dim_n1 = len(M1), len(M1[0])
    dim_m2, dim_n2 = len(M2), len(M2[0])

    if dim_m1 != dim_m2 or dim_n1 != dim_n2:
        return []

    res = [[0 for _ in range(dim_n1)] for _ in range(dim_m1)]
    for m in range(dim_m1):
        for n in range(dim_n1):
            res[m][n] = M1[m][n] + M2[m][n]
    return res

答案 2 :(得分:0)

这应该有用(我用你的例子测试过)。它检查每个secondry组件:

def matrix_sum(M1, M2):
    comp=True
    n=0
    for i in M1:
        if len(i)!=len(M2[n]):
            comp=False
        n+=1
    output=[]
    if comp:
        n=0
        for i in M1:
            add=[]
            m=0
            for j in i:
                add.append(j+M2[n][m])
                m+=1
            n+=1
            output.append(add)
    return output