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