Матриця Python та вступ до NumPy

У цій статті ми дізнаємося про матриці Python із використанням вкладених списків та пакету NumPy.

Матриця - це двовимірна структура даних, де числа розташовані в рядки та стовпці. Наприклад:

Ця матриця є матрицею 3x4 (вимовляється "три на чотири"), оскільки вона має 3 рядки та 4 стовпці.

Матриця Python

Python не має вбудованого типу для матриць. Однак ми можемо розглядати список зі списку як матрицю. Наприклад:

 A = ((1, 4, 5), (-5, 8, 9)) 

Ми можемо розглядати цей список списку як матрицю, що має 2 рядки та 3 стовпці.

Не забудьте дізнатися про списки Python, перш ніж продовжувати цю статтю.

Давайте подивимося, як працювати з вкладеним списком.

 A = ((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19)) print("A =", A) print("A(1) =", A(1)) # 2nd row print("A(1)(2) =", A(1)(2)) # 3rd element of 2nd row print("A(0)(-1) =", A(0)(-1)) # Last element of 1st Row column = (); # empty list for row in A: column.append(row(2)) print("3rd column =", column) 

Коли ми запускаємо програму, результат буде:

 A = ((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19)) A (1) = (-5, 8, 9, 0) A (1) (2) = 9 A (0) (- 1) = 12 3-й стовпець = (5, 9, 11) 

Ось ще кілька прикладів, пов’язаних з матрицями Python із використанням вкладених списків.

  • Додайте дві матриці
  • Транспонуйте матрицю
  • Помножте дві матриці

Використання вкладених списків як матриці працює для простих обчислювальних завдань, однак існує кращий спосіб роботи з матрицями в Python за допомогою пакета NumPy.

Масив NumPy

NumPy - це пакет для наукових обчислень, який підтримує потужний N-мірний об'єкт масиву. Перш ніж використовувати NumPy, вам потрібно встановити його. Для отримання додаткової інформації,

  • Відвідайте: Як встановити NumPy?
  • Якщо ви працюєте в Windows, завантажте та встановіть анаконда-дистрибутив Python. Він поставляється з NumPy та іншими декількома пакетами, що стосуються науки про дані та машинного навчання.

Після встановлення NumPy ви зможете імпортувати та використовувати його.

NumPy забезпечує багатовимірний масив чисел (який насправді є об'єктом). Візьмемо приклад:

 import numpy as np a = np.array((1, 2, 3)) print(a) # Output: (1, 2, 3) print(type(a)) # Output: 

Як бачите, викликається клас масиву NumPy ndarray.

Як створити масив NumPy?

Існує кілька способів створення масивів NumPy.

1. Масив цілих чисел, плаваючих та комплексних чисел

 import numpy as np A = np.array(((1, 2, 3), (3, 4, 5))) print(A) A = np.array(((1.1, 2, 3), (3, 4, 5))) # Array of floats print(A) A = np.array(((1, 2, 3), (3, 4, 5)), dtype = complex) # Array of complex numbers print(A) 

Коли ви запускаєте програму, результат буде:

 ((1 2 3) (3 4 5)) ((1.1 2. 3.) (3. 4. 5.)) ((1. + 0.j 2. + 0.j 3. + 0.j) (3. + 0.j 4. + 0.j 5. + 0.j)) 

2. Масив нулів та одиниць

 import numpy as np zeors_array = np.zeros( (2, 3) ) print(zeors_array) ''' Output: ((0. 0. 0.) (0. 0. 0.)) ''' ones_array = np.ones( (1, 5), dtype=np.int32 ) // specifying dtype print(ones_array) # Output: ((1 1 1 1 1)) 

Тут ми вказали dtype32 біти (4 байти). Отже, цей масив може приймати значення від до .-2-312-31-1

3. Використання arange () і shape ()

 import numpy as np A = np.arange(4) print('A =', A) B = np.arange(12).reshape(2, 6) print('B =', B) ''' Output: A = (0 1 2 3) B = (( 0 1 2 3 4 5) ( 6 7 8 9 10 11)) ''' 

Дізнайтеся більше про інші способи створення масиву NumPy.

Матричні операції

Вище ми навели вам 3 приклади: додавання двох матриць, множення двох матриць та транспонування матриці. Раніше ми використовували вкладені списки для написання цих програм. Давайте подивимося, як ми можемо виконати те саме завдання за допомогою масиву NumPy.

Додавання двох матриць

Ми використовуємо +оператор для додавання відповідних елементів двох матриць NumPy.

 import numpy as np A = np.array(((2, 4), (5, -6))) B = np.array(((9, -3), (3, 6))) C = A + B # element wise addition print(C) ''' Output: ((11 1) ( 8 0)) '''

Множення двох матриць

Щоб помножити дві матриці, ми використовуємо dot()метод. Дізнайтеся більше про те, як працює numpy.dot.

Примітка: * використовується для множення масивів (множення відповідних елементів двох масивів), а не для матричного множення.

 import numpy as np A = np.array(((3, 6, 7), (5, -3, 0))) B = np.array(((1, 1), (2, 1), (3, -3))) C = A.dot(B) print(C) ''' Output: (( 36 -12) ( -1 2)) ''' 

Транспонування матриці

Ми використовуємо numpy.transpose для обчислення транспонування матриці.

 import numpy as np A = np.array(((1, 1), (2, 1), (3, -3))) print(A.transpose()) ''' Output: (( 1 2 3) ( 1 1 -3)) ''' 

Як бачите, NumPy значно спростив наше завдання.

Доступ до елементів матриці, рядків і стовпців

Access matrix elements

Similar like lists, we can access matrix elements using index. Let's start with a one-dimensional NumPy array.

 import numpy as np A = np.array((2, 4, 6, 8, 10)) print("A(0) =", A(0)) # First element print("A(2) =", A(2)) # Third element print("A(-1) =", A(-1)) # Last element 

When you run the program, the output will be:

 A(0) = 2 A(2) = 6 A(-1) = 10 

Now, let's see how we can access elements of a two-dimensional array (which is basically a matrix).

 import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) # First element of first row print("A(0)(0) =", A(0)(0)) # Third element of second row print("A(1)(2) =", A(1)(2)) # Last element of last row print("A(-1)(-1) =", A(-1)(-1)) 

When we run the program, the output will be:

 A(0)(0) = 1 A(1)(2) = 9 A(-1)(-1) = 19 

Access rows of a Matrix

 import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) print("A(0) =", A(0)) # First Row print("A(2) =", A(2)) # Third Row print("A(-1) =", A(-1)) # Last Row (3rd row in this case)

When we run the program, the output will be:

 A(0) = (1, 4, 5, 12) A(2) = (-6, 7, 11, 19) A(-1) = (-6, 7, 11, 19) 

Access columns of a Matrix

 import numpy as np A = np.array(((1, 4, 5, 12), (-5, 8, 9, 0), (-6, 7, 11, 19))) print("A(:,0) =",A(:,0)) # First Column print("A(:,3) =", A(:,3)) # Fourth Column print("A(:,-1) =", A(:,-1)) # Last Column (4th column in this case) 

When we run the program, the output will be:

 A(:,0) = ( 1 -5 -6) A(:,3) = (12 0 19) A(:,-1) = (12 0 19) 

If you don't know how this above code works, read slicing of a matrix section of this article.

Slicing of a Matrix

Slicing of a one-dimensional NumPy array is similar to a list. If you don't know how slicing for a list works, visit Understanding Python's slice notation.

Візьмемо приклад:

 import numpy as np letters = np.array((1, 3, 5, 7, 9, 7, 5)) # 3rd to 5th elements print(letters(2:5)) # Output: (5, 7, 9) # 1st to 4th elements print(letters(:-5)) # Output: (1, 3) # 6th to last elements print(letters(5:)) # Output:(7, 5) # 1st to last elements print(letters(:)) # Output:(1, 3, 5, 7, 9, 7, 5) # reversing a list print(letters(::-1)) # Output:(5, 7, 9, 7, 5, 3, 1) 

Тепер давайте подивимося, як ми можемо нарізати матрицю.

 import numpy as np A = np.array(((1, 4, 5, 12, 14), (-5, 8, 9, 0, 17), (-6, 7, 11, 19, 21))) print(A(:2, :4)) # two rows, four columns ''' Output: (( 1 4 5 12) (-5 8 9 0)) ''' print(A(:1,)) # first row, all columns ''' Output: (( 1 4 5 12 14)) ''' print(A(:,2)) # all rows, second column ''' Output: ( 5 9 11) ''' print(A(:, 2:5)) # all rows, third to the fifth column '''Output: (( 5 12 14) ( 9 0 17) (11 19 21)) ''' 

Як бачите, використання NumPy (замість вкладених списків) значно полегшує роботу з матрицями, і ми навіть не подряпали основи. Ми пропонуємо вам детально вивчити пакет NumPy, особливо якщо ви намагаєтесь використовувати Python для науки / аналітики даних.

Ресурси NumPy, які можуть вам виявитися корисними:

  • Підручник з NumPy
  • Посилання на NumPy

Цікаві статті...