Помогите пожалуйста решить задачу на Python (Задача на картинке)
Вот код который я попытался написать:
class Matrix:
def __init__(self, elements: list):
self.elements = elements
self.len_elements = len(elements)
def __del__(self):
print("Матрица удалена!")
def __str__(self):
matrix_str = ""
for row in self.elements:
matrix_str += " ".join(str(x) for x in row) + "\n"
return matrix_str
def __add__(self, other: list):
result: int
for rows in range(len(self.elements)):
for colum in range(len((self.elements[0]))):
self.elements[rows][colum] = self.elements[rows][colum] + other.elements[rows][colum]
return Matrix(self.elements)
def __sub__(self, other):
result: int
for rows in range(len(self.elements)):
for colum in range(len((self.elements[0]))):
self.elements[rows][colum] = self.elements[rows][colum] - other.elements[rows][colum]
return Matrix(self.elements)
def __mul__(self, other):
result: int
for rows in range(len(self.elements)):
for colum in range(len((self.elements[0]))):
self.elements[rows][colum] = self.elements[rows][colum] * other.elements[rows][colum]
return Matrix(self.elements)
def __imul__(self, other):
for rows in range(len(self.elements)):
for colum in range(len((self.elements[0]))):
self.elements[rows][colum] = self.elements[rows][colum] * other
return Matrix(self.elements)
A = Matrix([[1.0, 2.0, 2.0], [0, 3.0, 1.0], [1.0, 0, 0]])
B = Matrix([[0, 0, 1], [-0.25, 0.5, 0.25], [0.75, -0.5, -0.75]])
D = (3 * (A * B)) + ((A - B) * A)
print(D)
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Частично реализованный класс с методом __mul__()
для примера. Умножаются матрица на матрицу и матрица на скаляр.
class Matrix:
def __init__(self, elements: list):
self.elements = elements
def __str__(self):
matrix_str = ""
for row in self.elements:
matrix_str += " ".join(f'{x:>5.2f}' for x in row) + "\n"
return matrix_str
def __mul__(self, other):
if isinstance(other, (int, float)):
return Matrix([[x * other for x in row] for row in self.elements])
else:
result = []
for row in self.elements:
buf = []
for c in range(len(row)):
s = 0
for col, el in enumerate(row):
s += el * other.elements[col][c]
buf.append(s)
result.append(buf)
return Matrix(result)
A = Matrix([[1.0, 2.0, 2.0], [0, 3.0, 1.0], [1.0, 0, 0]])
B = Matrix([[0, 0, 1], [-0.25, 0.5, 0.25], [0.75, -0.5, -0.75]])
print(A)
print(B)
print(A * 3)
print(A * B)
1.00 2.00 2.00
0.00 3.00 1.00
1.00 0.00 0.00
0.00 0.00 1.00
-0.25 0.50 0.25
0.75 -0.50 -0.75
3.00 6.00 6.00
0.00 9.00 3.00
3.00 0.00 0.00
1.00 0.00 0.00
0.00 1.00 0.00
0.00 0.00 1.00
Про умножение матриц можно почитать, например, здесь