Python中的矩阵加法 - 列表
我正在尝试用Python写一个矩阵相加的函数。
这是我一直在尝试的代码,但它给我报了一个列表索引错误,我搞不清楚为什么。
def matrixADD(A,B):
Z = []
#TODO
for i in range(0,len(A)):
for column in range(0, len(A)):
result = A[i][column] + B[i][column]
Z[i][column] = (result)
return Z
我使用了以下这些列表:
A = [[2,4], [7,0], [6,3]]
B = [[3,1], [-1,8], [-3, 3]]
理论上,A[0][0] + B[0][0] 应该等于5,我想把这个值加到Z[0][0]的位置上。
但是我总是收到这个错误:IndexError: list index out of range(索引错误:列表索引超出范围)
3 个回答
0
你在使用 column
的时候,范围是从 0 到 len(A)(也就是 3)。但是 A[i] 的长度只有 2,所以 A[i][2] 会超出范围。
试着把列的范围改成到 len(A[i]) 结束,而不是 len(A):
def matrixADD(A,B):
Z = []
#TODO
for i in range(0,len(A)):
for column in range(0, len(A[i])):
result = A[i][column] + B[i][column]
Z[i][j] = (result)
return Z
0
你有一个叫做A的矩阵,它的长度是3,也就是说它有3行。但是这个矩阵的实际大小是3行2列,也就是3x2。所以当你想访问A[2][2]的时候,就会出错,因为列的索引是从0开始的,最大只能到1,超出了范围。
2
>>> A = [[2,4], [7,0], [6,3]]
>>> B = [[3,1], [-1,8], [-3, 3]]
>>> Z = [map(sum, zip(*t)) for t in zip(A, B)]
>>> Z
[[5, 5], [6, 8], [3, 6]]
关于如何修复你当前的代码:
Z = []
for i in range(len(A)):
row = []
for j in range(len(A[i])):
row.append(A[i][j] + B[i][j])
Z.append(row)
这里重要的是,你不能直接给 Z[i][j]
赋值,除非那一行或那一列已经存在。所以你需要单独构建每个内部列表,然后把它们添加到 Z
中。此外,内部循环需要在一行的长度结束,所以我把 range(len(A))
改成了 range(len(A[i]))
。