Python, Class, функция Call внутри класса, перегрузка операторов (умножение матриц) - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь написать класс, который имеет функцию перегрузки операторов мультипликации, которая используется для обработки умножения матриц.Мой метод -

  1. Транспонировать матрицу (я пишу функцию транспонирования внутри класса), которая называется T
  2. Написать функцию скалярного произведения, которая обрабатывает мутипликацию для строки A и строки B(Так как я уже транспонировал матрицу B).
  3. Напишите функцию перегрузки оператора умножения, которая вызывает функцию произведения транспонирования и точечного произведения.

Моя проблема:

  1. Итак, проблема у меня возникает, когда япопробуйте вызвать функцию dot, это напоминает мне, что "dot () принимает 2 позиционных аргумента, но 3 были заданы".Я как бы знаю, почему точка (я, другой) может принимать только еще один аргумент, кроме себя самого?Тем не менее, мой метод требует, чтобы я отдельно говорил точечной функции, что я хочу ввести определенную строку Матрицы.Вот почему я использовал self.g [i].Вещь, которую я не понимаю, состоит в том, что моя точка функции может принимать два входа - self и other. Когда я указываю функцию mul , я также даю два входа "self.dot (self.g [я], other.g [j]) ", почему программа считается как три аргумента.
  2. Мой второй вопрос о" я ", я знаю, когда я хочу вызвать функцию внутри класса, янужно использовать синтаксис self.functionname, я был действительно запутан здесь, self - это объект, для меня «self» представляет матрицу 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

Dotproduct

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...