Академия Eduson

Вложенные списки. Операции над матрицами

 Операции над матрицами в математике

 Одну матрицу можно умножать на другую только тогда, когда:

 Ответ: количество столбцов в первой матрице совпадает с количеством строк во второй матрице

 Результат умножения матрицы размера Am×n​ на матрицу размером Bn×k – матрица C с размером:

 Ответ:  Cm×k

 Напишите программу для вычисления суммы двух матриц. На вход программе подаются два натуральных числа n и m — количество строк и столбцов в матрицах, затем элементы первой матрицы, затем пустая строка, далее следуют элементы второй матрицы.

n, m = [int(i) for i in input().split()]

l = [[0] * m for _ in range(n)]

l_1 = [[int(i) for i in input().split()] for _ in range(n)]
s = input()
l_2 = [[int(i) for i in input().split()] for _ in range(n)]

for i in range(n):
    for j in range(m):
        l[i][j] = l_1[i][j] + l_2[i][j]

for x in l:
    print(*x)

 Напишите программу, которая перемножает две матрицы. На вход программе подаются два натуральных числа n и m — количество строк и столбцов в первой матрице, затем элементы первой матрицы, затем пустая строка. Далее следуют числа m и k — количество строк и столбцов второй матрицы затем элементы второй матрицы.

n, m = [int(i) for i in input().split()]

l = [[0] * n for _ in range(n)]

l_1 = [[int(i) for i in input().split()] for _ in range(n)]
s = input()
m, k = [int(i) for i in input().split()]
l_2 = [[int(i) for i in input().split()] for _ in range(m)]

for i in range(n):
    for j in range(k):
        r = 0
        for y in range(m):
            r += l_1[i][y] * l_2[y][j]
        l[i][j] = r

for x in l:
    print(*x)

 Напишите программу, которая возводит квадратную матрицу в m-ую степень. На вход программе подаётся натуральное число n — количество строк и столбцов в матрице, затем элементы матрицы, затем натуральное число m.

def square_mx_mult(l_1, l_2, size):
    l = [[0] * size for _ in range(size)]
    for i in range(size):
        for j in range(size):
            for k in range(size):
                l[i][j] += l_1[i][k] * l_2[k][j]
    return l                

n = int(input())
ll = [[int(i) for i in input().split()] for _ in range(n)]
m = int(input())

p_l = ll.copy()

for _ in range(m - 1):
    p_l = square_mx_mult(ll, p_l, n)

for x in p_l:
    print(*x)