我遇到了一个练习,我遇到了问题:
编写一个带有两个输入参数的函数: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]]
如何更改它才能实现此目的?
答案 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