我试图在python (没有numpy)中创建一个函数,它将模仿numpy中的矩阵乘法。该程序包含两个功能。第一个函数接受两个列表(l1和l2)作为输入,并创建一个虚拟列表(虚拟列表)。第二个函数执行列表、l1和l2的矩阵乘法,并将值输入到虚拟列表(虚拟列表)中。问题是,在最后的输出中,列值将在每一行中被添加和重复。但是,如果我硬编码程序中的虚拟列表,它将提供正确的输出。如果我分别运行第一个函数来创建虚拟列表,我将得到正确的输出。不知道我哪里出了问题。提供以下两种代码。请帮帮忙。
#下面的代码给了我错误的结果:
l1 = [[1,2],[3,4],[5,6]]
l2 = [[7,8,0],[9,10,5]]
def dummy_matrix(l1,l2):
g = len(l1)
h = len(l2[0])
m = []
p = []
for j in range(h):
p.append(0)
for i in range(g):
m.append(p)
dummy = m
return(dummy)
def mat_mul(l1,l2):
f = dummy_matrix(l1,l2)
for a in range(len(l1)):
for b in range(len(l2[0])):
for c in range(len(l2)):
f[a][b] += l1[a][c]*l2[c][b]
return(f)
mat_mul(l1,l2)#下面的代码有硬编码的虚拟列表,并给出了正确的输出
l1 = [[1,2],[3,4],[5,6]]
l2 = [[7,8,0],[9,10,5]]
def dummy_matrix(l1,l2):
g = len(l1)
h = len(l2[0])
m = []
p = []
for j in range(h):
p.append(0)
for i in range(g):
m.append(p)
dummy = m
return(dummy)
def matrix_multi(l1,l2):
f = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
for a in range(len(l1)):
for b in range(len(l2[0])):
for c in range(len(l2)):
f[a][b] += l1[a][c]*l2[c][b]
return(f)
matrix_multi(l1,l2)发布于 2022-04-13 11:54:14
您创建错误的dummy_matrix。首先创建一个名为p的行,向其追加一些零,然后多次将追加到同一行。
dm = dummy_matrix(l1, l2)
dm[1][2] = 1
print(dm)您可以注意到,这将修改多个行,显示它们实际上是相同的引用。您需要为每一行创建新的列表:
m = []
for i in range(g):
p = []
for j in range(h):
p.append(0)
m.append(p)https://stackoverflow.com/questions/71856978
复制相似问题