我想创建一个尚不存在的列表。因此,我想使用插入功能将“ 0”作为该列表中的新元素插入。
问题是我不知道如何访问嵌套列表中元素位置的索引。
我尝试使用matrix_result[i1].insert(i2, 0)
但是它没有帮助我,并且由于这一行,程序给出了错误。 完整代码:
matrix1 = [[1, 5], [6, 4]]
matrix2 = [[3, 2], [7, 8]]
matrix_result = []
def add(p1, p2):
global matrix_result
for i1 in range(0, len(p1)):
matrix_result.insert(i1,0)
for i2 in range(0, len(p1[i1])):
matrix_result[i1].insert(i2, 0)
matrix_result[i1][i2] = p1[i1][i2] + p2[i1][i2]
return matrix_result
print(add(matrix1, matrix2))
预期结果:matrix_result具有与matrix1中一样多的元素,但所有元素的值为0
实际结果:由于以下语句而出错:matrix_result[i1].insert(i2, 0)
答案 0 :(得分:3)
对于所有矩阵操作,请使用numpy
库:
import numpy as np
np.array(matrix1) + np.array(matrix2)
输出:
#array([[ 4, 7],
# [13, 12]])
除了更简单,更灵活之外,它还将更快。
答案 1 :(得分:2)
我想创建一个尚不存在的列表。因此,我想使用插入功能将“ 0”作为该列表中的新元素插入。
您不能插入到不存在的列表中。您必须先使用[]
创建列表,然后才能在其中插入内容。
解决方案:在您说matrix_result.insert(i1, 0)
的行上,插入int
而不是list
。要插入空的list
,您必须说matrix_result.insert(i1, [])
。
编辑:正如Jondiedoop所说,通常建议将numpy
库用于矩阵运算,因为它是高度优化且易于使用的。前往此处了解更多信息:NumPy.org
答案 2 :(得分:0)
您的空列表matrix_result
给口译员带来了一些挑战。我对您的代码做了一些更改,并添加了矩阵。
matrix1 = [[1, 5], [6, 4]]
matrix2 = [[3, 2], [7, 8]]
matrix_result = [[0,0], [0,0]] # CHANGE: empty array is now zeroes
def add_matrix(p1, p2):
global matrix_result
for i1 in range(0, len(p1)):
for i2 in range(0, len(p1[i1])):
matrix_result[i1][i2] = 0 # change: no .insert(), just assignment. you can (and probably should) remove this line.
matrix_result[i1][i2] = p1[i1][i2] + p2[i1][i2]
return matrix_result
print(add_matrix(matrix1, matrix2))
希望对您有所帮助!
答案 3 :(得分:0)
更改matrix_result以包含列表列表。解决方案中的另一个问题是您正在访问保存在列表matrix_result[i1]
中的int类型,并试图插入int类型,而使用insert(i2, 0)
matrix1 = [[1, 5], [6, 4]]
matrix2 = [[3, 2], [7, 8]]
matrix_result = [[0,0],[0,0]]
def add1(p1, p2):
global matrix_result
for i1 in range(len(p1)):
for i2 in range(len(p1[i1])):
matrix_result[i1][i2] = p1[i1][i2] + p2[i1][i2]
return matrix_result
print(add1(matrix1, matrix2))
尽管您不一定需要在这里使用insert()
,但是如果您确实要这样做,那么下面是您代码的更新版本
matrix1 = [[1, 5], [6, 4]]
matrix2 = [[3, 2], [7, 8]]
matrix_result = [[],[]]
def add1(p1, p2):
global matrix_result
for i1 in range(0, len(p1)):
for i2 in range(0, len(p1[i1])):
matrix_result[i1].insert(i2,0)
matrix_result[i1][i2] = p1[i1][i2] + p2[i1][i2]
return matrix_result
print(add1(matrix1, matrix2))
答案 4 :(得分:0)
我认为您不需要在这里使用insert()
。一种更简单的方法是使用zip()
:
matrix1 = [[1, 5], [6, 4]]
matrix2 = [[3, 2], [7, 8]]
def add(*args):
matrix_result = []
for pair in zip(*args):
inner = []
for x, y in zip(*pair):
inner.append(x + y)
matrix_result.append(inner)
return matrix_result
print(add(matrix1, matrix2))
# [[4, 7], [13, 12]]
您还可以使用列表理解:
def add(*args):
return [[x + y for x, y in zip(*pair)] for pair in zip(*args)]
答案 5 :(得分:0)
如果您要实现矩阵加法,我假设您需要以下行为:
# m1 = [[1, 5], [6, 4]]
# m2 = [[3, 2], [7, 8]]
# add(m1, m2) => [[4, 7], [13, 12]]
如果您不能使用任何库,则可以使用zip和map,我们当然还假定矩阵的尺寸当然是相同的:
def add(p1, p2):
adder = lambda tuple: [tuple[0][i] + tuple[1][i] for i in range(len(tuple[1]))]
return list(map(adder, zip(p1, p2)))
print(add(matrix1, matrix2))
# [[4, 7], [13, 12]]
最简单,最快的方法是使用numpy:
import numpy as np
def add(p1, p2):
return np.array(p1) + np.array(p2)