首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用函数的输出作为另一个函数的输入

使用函数的输出作为另一个函数的输入
EN

Stack Overflow用户
提问于 2022-04-13 11:46:55
回答 1查看 30关注 0票数 -1

我试图在python (没有numpy)中创建一个函数,它将模仿numpy中的矩阵乘法。该程序包含两个功能。第一个函数接受两个列表(l1和l2)作为输入,并创建一个虚拟列表(虚拟列表)。第二个函数执行列表、l1和l2的矩阵乘法,并将值输入到虚拟列表(虚拟列表)中。问题是,在最后的输出中,列值将在每一行中被添加和重复。但是,如果我硬编码程序中的虚拟列表,它将提供正确的输出。如果我分别运行第一个函数来创建虚拟列表,我将得到正确的输出。不知道我哪里出了问题。提供以下两种代码。请帮帮忙。

#下面的代码给了我错误的结果:

代码语言:javascript
复制
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)

#下面的代码有硬编码的虚拟列表,并给出了正确的输出

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2022-04-13 11:54:14

您创建错误的dummy_matrix。首先创建一个名为p的行,向其追加一些零,然后多次将追加到同一行

代码语言:javascript
复制
dm = dummy_matrix(l1, l2)

dm[1][2] = 1

print(dm)

您可以注意到,这将修改多个行,显示它们实际上是相同的引用。您需要为每一行创建新的列表:

代码语言:javascript
复制
    m = []
    for i in range(g):
        p = []
        for j in range(h):
            p.append(0)
        m.append(p)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71856978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档