Помогите пожалуйста решить задачу на 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

Про умножение матриц можно почитать, например, здесь

→ Ссылка