Python中的矩阵加法 - 列表

1 投票
3 回答
11782 浏览
提问于 2025-04-17 21:50

我正在尝试用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]))

撰写回答