【问题标题】:Matrix Multiplication Python - Matrix rows not seperated矩阵乘法 Python - 矩阵行不分开
【发布时间】:2019-11-11 17:59:18
【问题描述】:

我目前正在尝试在 python 上进行矩阵 mult,并且出现了正确的答案,但是,不是每一行都是独立的,而是将所有行组合成一行,然后重复行数。

def matrixtranspose(m1):
    mT = [[m1[i][x] for i in range(len(m1))] for x in range(len(m1[0]))]
    return mT

def dotProduct(m1row, m2column):
    l3 = [m1row[i] * m2column[i] for i in range(len(m1row))]
    dP = sum(l3)
    return dP

def matrixmult(m1, m2):
    transposedMatrix = matrixtranspose(m2)
    numRows = len(transposedMatrix)
    newMatrix = []
    addedDP = []

    for rows in range(0, (len(m1))):
            for col in range(0, len(transposedMatrix)):
                addedDP.append(dotProduct(m1[rows], transposedMatrix[col]))
            newMatrix.append(addedDP)

    return newMatrix

这将返回:

[[4, 20, 4, 4, 20, 4, 6, 36, 6],
 [4, 20, 4, 4, 20, 4, 6, 36, 6],
 [4, 20, 4, 4, 20, 4, 6, 36, 6]]

代替:

[[4, 20, 4] [4, 20, 4] [6, 36, 6]]

我该如何解决?

【问题讨论】:

  • 您应该添加调用已定义方法的方式。

标签: python matrix multiplication


【解决方案1】:

问题在于你的吸积逻辑:

addedDP = []

for row in range(0, (len(m1))):
    for col in range(0, len(transposedMatrix)):
        addedDP.append(dotProduct(m1[row], transposedMatrix[col]))

您在遍历矩​​阵时将每个元素添加到addedDP每个 产品被附加到一个全局值列表中,而不仅仅是当前行的值。 addedDP 不会为每个新行重置。然后,对于矩阵中的每一行:

    newMatrix.append(addedDP)

您将原始引用添加到整个列表。因此,当您完成时,您的“结果”列表中有该列表的 len(m1) 副本。

您可以通过为每一行重新初始化 addedDP 来解决此问题:

newMatrix = []

for row in range(0, (len(m1))):
    addedDP = []
    for col in range(0, len(transposedMatrix)):
        addedDP.append(dotProduct(m1[row], transposedMatrix[col]))
        # print("row, col:", row, col, addedDP)
    newMatrix.append(addedDP)
    # print("row", row, addedDP)

return newMatrix

我离开了我的调试print 语句。我强烈建议您学习这个基本的调试工具:如果您的程序有问题,它哪里出了问题! :-) 请参阅这个可爱的 debug 博客寻求帮助。

给定一个主程序:

m1 = [[1, 2],
      [3, 4]]
m2 = [[0, 1],
      [-1, 0]]
print(matrixmult(m1, m2))

启用print 语句的输出:

row, col: 0 0 [-2]
row, col: 0 1 [-2, 1]
row 0 [-2, 1]
row, col: 1 0 [-4]
row, col: 1 1 [-4, 3]
row 1 [-4, 3]
[[-2, 1], [-4, 3]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-11
    • 2013-12-23
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2023-03-03
    • 2018-04-11
    • 1970-01-01
    相关资源
    最近更新 更多