Python,类,类内的Call函数,运算符重载(矩阵乘法)

时间:2018-11-25 09:29:58

标签: python class operator-overloading

我正在尝试编写一个具有多重运算符重载函数的类,该函数用于处理矩阵乘法。 我的方法是

  1. 转置一个称为T的矩阵(我在类内写了一个转置函数)
  2. 编写一个点积函数,处理行A和行B的乘法(因为我已经对矩阵B进行了转置)。
  3. 编写乘法运算符重载函数,该函数调用转置和点积函数。

我的问题:

  1. 所以我遇到的问题是当我尝试调用函数点时,它使我想起“ dot()接受2个位置参数,但给出了3个”。我有点知道为什么点(自身,其他)除了自身之外只能再接受一个论点?但是,我的方法要求我专门告诉点函数我要输入矩阵的特定行。这就是为什么我使用self.g [i]。我不明白的是我的函数点可以接受两个输入,分别是self和其他。当我在 mul 函数中指定时,我还给出了两个输入“ self.dot(self.g [i],other.g [j])”,为什么程序算作三个参数。
  2. 我的第二个问题是关于“自我”的,我知道当我想在类内部调用一个函数时,我需要使用self.functionname语法,我在这里真的很困惑,自我就是对象,对我来说“自我” “”代表矩阵A,“ other”代表矩阵B,如果我使用self来调用函数,程序会感到困惑吗?

老实说,我在课堂上对自我的运用感到困惑,是否有推荐的例子可以帮助像我这样的初学者理解这一概念?

先谢谢大家。

这是我的密码

构造函数

# Constructor
def __init__(self, grid):  # I don't know if i need another input here or not like def __init__(self, grid , matrixB)
    self.g = grid
    self.h = len(grid)
    self.w = len(grid[0])

乘法运算符重载

def __mul__(self, other):

    af_trans = other.T() # Transpose the second matrix
    for i in range(0,self.h):
        every_row=[]
        for j in range(0,self.h):
            element_product = self.dot(self.g[i],other.g[j])
            every_row.append(element_product)
    return every_row

转置函数

def T(self):

    T_matrix = []
    for i in range(0,self.h):
        new_row = []
        for j in range(0,self.w):
            T_element = self.g[j][i]
            new_row.append(T_element)
        T_matrix.append(new_row)
    return T_matrix

点产品

def dot(self,other):  
    sumproduct=0
    for i in range(0,self.h):  
        element_product = self.g[i][i]*other.g[i][i] #The first element 
                        of Matrix A times the first element of Matrix B
        sum_product = sum_product+element_product
    return sum_product 

0 个答案:

没有答案