Код: Выделить всё
M1=Matrix(elements)
print(M1**3)
Вот ошибка, которую я получаю, когда пытаюсь это сделать:
Код: Выделить всё
TypeError: unsupported operand type(s) for ** or pow(): 'Matrix' and 'int'
Вот класс для справки.
(Я знаю, что код может быть неэффективным, это всего лишь практика)
Код: Выделить всё
class Matrix:
'''A list based matrix class'''
def __init__(self,rows):
#rows is a 2-d list ex. [[1,2,3],[4,5,6]]
self.rows=rows
self.columns=self.get_cols()
if not(self.valid()):
raise ValueError("Some incomplete rows are present")
else:
self.order=(len(self.rows),len(self.columns))
def valid(self):
lenght=len(self.rows[0])
for i in self.rows:
if not (len(i) == lenght):
return False
else:
return True
def get_cols(self):
cols=[]
for row in self.rows:
for j in range(len(row)):
try:
cols[j].append(row[j])
except IndexError:
cols.append([row[j]])
return cols
def __mul__(self,other):
if(type(self) is type(other)):
#MATRIX MULTIPLICATION
if(self.order[1] == other.order[0]):
prod=[[] for i in range(self.order[0])]
for row in range(len(self.rows)):
for col in range(len(other.columns)):
sum=0
for i in range(len(self.rows[row])):
sum+=self.rows[row][i]*other.columns[col][i]
prod[row].append(sum)
return Matrix(prod)
else:
raise ValueError("Can't multiply 2 matrices with different inner dimensions")
elif(type(other) is int or type(other) is float):
#scalar multiplication
for i in range(len(self.rows)):
for j in range(len(self.rows[i])):
self.rows[i][j]*=other
return self
else:
raise ValueError(f"Can't multiply with {type(other)}")
Подробнее здесь: https://stackoverflow.com/questions/684 ... -in-python