Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

теория 1к 2с / Матричные операции и СЛАУ - практика

.pdf
Скачиваний:
7
Добавлен:
20.06.2023
Размер:
358.63 Кб
Скачать

Основы работы с матрицами в Python и NumPy

Подготовка

Все дальнейшие примеры кода подразумевают, что модуль NumPy импортирован следующим образом:

1 import numpy as np

Создание матриц

 

Исходный код

 

 

Результат

 

 

 

 

 

 

1

# Вектор строка

 

a =

 

 

2

a = np.array([1, 2, 3])

 

[1

2 3]

 

3

print("a =\n", a)

 

b =

 

 

4

 

 

[[1]

 

5

# Вектор столбец

 

[2]

 

 

6

b = np.array([[1, 2, 3]]).T

 

[3]]

 

7

print("b =\n", b)

 

c =

 

 

8

 

 

[[1 2 3]

 

9

# Матрица

 

[4

5 6]]

 

10

c = np.array([

 

 

 

 

 

 

 

 

11

[1, 2, 3],

 

 

 

 

 

 

 

 

12

[4, 5, 6]

 

 

 

 

13])

14print("c =\n", c)

Обратите внимание на двойные скобки при создании вектора-столбца

Создание матриц

 

 

Исходный код

 

 

 

Результат

 

 

 

 

 

 

 

 

 

 

1

a = np.linspace(0, 1, 5)

 

 

 

a =

 

 

 

 

 

2

print("a =\n", a)

 

 

 

[0.

0.25

0.5

0.75 1. ]

 

 

3

 

 

 

 

b =

 

 

 

 

 

4

b = np.arange(0, 1, 0.25)

 

 

 

[0.

0.25

0.5

0.75]

 

 

5

print("b =\n", b)

 

 

 

c =

 

 

 

 

 

6

 

 

 

 

[[0. 0. 0.]

 

 

 

 

7

c = np.zeros((2, 3))

 

 

 

[0. 0. 0.]]

 

 

 

 

8

print("c =\n", c)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Множество других функций для создания матриц можно найти в документации по NumPy

Преобразование матриц

 

 

Исходный код

 

 

 

Результат

 

 

 

 

 

 

 

 

 

 

 

1

# Создание исходной матрицы

 

 

 

a =

 

 

 

 

 

 

2

a = np.array([[0, 1, 2, 3],

 

 

 

[[ 0

1

2

3]

 

 

 

3

[4, 5, 6, 7],

 

 

 

[ 4

5

6

7]

 

 

 

4

[8, 9, 10, 11]

 

 

 

[ 8

9 10 11]]

 

 

 

5

])

 

 

 

b =

 

 

 

 

 

 

6

print("a =\n", a)

 

 

 

[[ 0

1]

 

 

 

 

 

7

 

 

 

 

[ 2

3]

 

 

 

 

 

8

# Изменение размера матрицы

 

 

 

[ 4

5]

 

 

 

 

 

9

b = np.reshape(a, (6, 2))

 

 

 

[ 6

7]

 

 

 

 

 

10

print("b =\n", b)

 

 

 

[ 8

9]

 

 

 

 

 

11

 

 

 

 

[10 11]]

 

 

 

 

 

12

# Транспонирование

 

 

 

с =

 

 

 

 

 

 

13

с = b.T

 

 

 

[[ 0

2

4

6

8 10]

 

 

14

print("с =\n", с)

 

 

 

[ 1

3

5

7

9 11]]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Новый размер матрицы должен сохранять общее количество элементов

Операции с матрицами

 

 

Исходный код

 

 

 

 

 

Результат

 

 

 

 

 

 

 

 

 

 

1

a = np.array([[1, 2, 3],

 

 

 

c0

=

 

 

 

 

2

 

[4, 5, 6]])

 

 

 

[[ 2

4

6]

 

 

3

b = np.array([1, 2, 4])

 

 

 

[

8

10 12]]

 

 

4

 

 

 

 

 

c1

=

 

 

 

 

5

c0

= a + a

 

 

 

[[ 2

4

7]

 

 

6

print("c0 =\n", c0)

 

 

 

[

5

7 10]]

 

 

7

c1

= a + b

 

 

 

c2

=

 

 

 

 

8

print("c1 =\n", c1)

 

 

 

[[ 1

4

12]

 

 

9

c2

= a * b

 

 

 

[

4

10 24]]

 

 

10

print("c2 =\n", c2)

 

 

 

c3

=

 

 

 

 

11

 

 

 

 

 

[17 38]

 

 

 

12

c3

= np.dot(a, b)

 

 

 

c4

=

 

 

 

 

13

print("c3 =\n", c3)

 

 

 

[17 38]

 

 

 

14

c4

= a @ b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15

print("c4 =\n", c4)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Все простые математические операции выполняются поэлементно

Линейная алгебра

 

Исходный код

 

Результат

 

 

 

 

1

a = np.array([[-4, -3, -2],

 

norm = 7.745966692414834

 

2

[-1, 0, -1],

 

det = -12.0

 

3

[2, 3, 4]])

 

trace = 0

 

4

# Норма матрицы

 

a =

 

5

norm = np.linalg.norm(a)

 

[[-4 -3 -2]

 

6

print("norm =", norm)

 

[-1 0 -1]

 

7

# Определитель матрицы

 

[ 2 3 4]]

 

8

det = np.linalg.det(a)

 

 

 

 

 

 

9

print("det =", det)

 

 

 

 

 

 

10

# След матрицы

 

 

 

11

trace = np.trace(a)

 

 

 

12print("trace =", trace)

13# Обратная матрица

14inv = np.linalg.inv(a)

15print("a =\n", a)

Множество других функций линейной алгебры можно найти в документации по NumPy

Решение СЛАУ

Рассмотрим следующую систему

Решение СЛАУ

 

 

Исходный код

 

 

Результат

 

 

 

 

 

 

 

 

1

a = np.array([[1, 2],

 

 

 

s1 = [-1.

1.]

 

 

2

[3, 5]])

 

 

 

s2 = [-1.

1.]

 

 

3

b = np.array([1, 2])

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

# Точное решение СЛАУ

 

 

 

 

 

 

 

6

s1 = np.linalg.solve(a, b)

 

 

 

 

 

 

 

7

print("s1 =", s1)

 

 

 

 

 

 

 

8

# Решения СЛАУ методом

 

 

 

 

 

 

 

9

# наименьших квадратов

 

 

 

 

 

 

 

10

s2 = np.linalg.lstsq(a, b)[0]

 

 

 

 

 

 

 

11

print("s2 =", s2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Используйте функцию lstsq при плохой обусловленности СЛАУ

Спасибо за внимание