我正在尝试将两个矩阵相乘。我为矩阵做了一堂课,但是在实现产品的数学算法部分时遇到了麻烦。我知道第一个矩阵中的列数应该等于第二个矩阵中的行,但这给了我不同的输出。而且更重要的是,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来做到这一点
答案 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