Python矩阵产品

时间:2018-09-30 19:24:47

标签: python python-3.x matrix matrix-multiplication

我正在尝试将两个矩阵相乘。我为矩阵做了一堂课,但是在实现产品的数学算法部分时遇到了麻烦。我知道第一个矩阵中的列数应该等于第二个矩阵中的行,但这给了我不同的输出。而且更重要的是,M1的第一行应该在prod上点缀M2的第一列,使其等于结果中的第一项,但不是。

def Mult(self,Matrix):
    result=ClassMatrix()
    result.addRow(self.numberofRows)
    result.addColumn(Matrix.numberofColumns)
    for i in range(0,self.numberofRows):
       for j in range(0,Matrix.numberofColumns):
            result.content[i][j]=float(0.0)
    for i in range(0,self.numberofRows):
       for j in range(0,Matrix.numberofColumns):
              for k in range(0,self.numberofRows):
               result.content[i][j] += self.content[i][k] * Matrix.content[k][j]
   return result

例如,将3x2和2x2矩阵相乘得到2x2矩阵,而输出不是正确的整数值。我想不使用numpy来做到这一点

2 个答案:

答案 0 :(得分:1)

我想你可以这样尝试:

def Mult(self,Matrix):
    result=ClassMatrix()
    result.addRow(self.numberofRows)
    result.addColumn(Matrix.numberofColumns)
    for i in range(0,self.numberofRows):
       for j in range(0,Matrix.numberofColumns):
           for k in range(0,Matrix.numberofRows):
               result.content[i][j] += self.content[i][k] * Matrix.content[k][j]
    return result

例如修复缩进,删除外部循环,并在内部循环中使用相乘的矩阵行和列数。 如果您共享所有代码,则测试起来会更容易...

答案 1 :(得分:0)

您可以使用以下方法,它将更加直观和易于维护。

import numpy as np

def Mult(self,Matrix):
    result = ClassMatrix()

    # not sure about addRow and addColumn methods but 
    # if we can simply update content or pass it as a param to constructor
    # then next 2 statements will not be required
    result.addRow(self.numberofRows)
    result.addColumn(Matrix.numberofColumns)

    # using numpy dot product for matrix multiplication
    result.content = np.dot(self.content, Matrix.content)
    
    return result