Посібник із використання масивів у Python

Посібник із використання масивів у Python

Вступ

Уявіть, що у вас на телефоні є список улюблених пісень. Цей список відтворення — це список, у якому кожна пісня розміщена в певному порядку. Ви можете відтворити першу пісню, перейти до другої, перейти до п’ятої і так далі. Цей список відтворення дуже схожий на масив у комп’ютерному програмуванні.

Масиви є однією з найбільш фундаментальних і широко використовуваних структур даних.

По суті, масив — це структурований спосіб зберігання кількох елементів (наприклад, чисел, символів або навіть інших масивів) у певному порядку, і ви можете швидко отримати доступ, змінити чи видалити будь-який елемент, якщо знаєте його позицію (індекс).

У цьому посібнику ми дамо вам вичерпний огляд структури даних масиву. Перш за все, ми розглянемо, що таке масиви та які їхні основні характеристики. Потім ми перейдемо у світ Python, досліджуючи, як масиви реалізуються, маніпулюють і застосовуються в реальних сценаріях.

Розуміння структури даних масиву

Масиви належать до найстаріших і найфундаментальніших структур даних, які використовуються в інформатиці та програмуванні. Їх простота в поєднанні з їх ефективністю в певних операціях робить їх основною темою для всіх, хто заглиблюється в сферу управління та маніпулювання даними.

Масив — це набір елементів, зазвичай з одного типу, що зберігається в безперервні місця пам'яті.

Це безперервне зберігання дозволяє масивам забезпечувати постійний доступ до будь-якого елемента з урахуванням його індексу. Кожен елемент у масиві називається an елемент, а позиція елемента в масиві визначається його індекс, що зазвичай починається з нуля.

Наприклад, розглянемо масив цілих чисел: [10, 20, 30, 40, 50]. Ось елемент 20 має індекс 1:

індексація масиву python

Є кілька Переваги використання масивів для зберігання наших даних. Наприклад, завдяки своїй структурі пам’яті масиви дозволяють O (1) (постійна) складність часу при доступі до елемента за його індексом. Це особливо корисно, коли нам потрібен довільний доступ до елементів. Крім того, масиви зберігаються в безперервні місця пам'яті, що може призвести до кращої локалізації кешу та загального підвищення продуктивності певних операцій. Ще одна помітна перевага використання масивів полягає в тому, що оскільки масиви мають фіксований розмір після оголошення, легше керувати пам’яттю та уникнути неочікуваних переповнень або помилок браку пам’яті.

примітки: масиви особливо корисні в сценаріях, де Розмір колекції відомий заздалегідь і залишається постійним, або де довільний доступ частіше, ніж вставки та видалення.

З іншого боку, масиви мають власний набір недоліки. Одним із основних обмежень традиційних масивів є їх фіксований розмір. Після створення масиву його розмір не можна змінити. Це може призвести до таких проблем, як зайва пам’ять (якщо масив завеликий) або необхідність зміни розміру (якщо масив замалий). Крім того, вставлення або видалення елемента в середині масиву вимагає зміщення елементів, що призводить до О (п) трудомісткість цих операцій.

Підводячи підсумок, давайте проілюструємо основні характеристики масивів на прикладі списку відтворення пісень із початку цього посібника. Масив — це структура даних, яка:

  • Індексується: Подібно до того, як кожна пісня у вашому списку відтворення має номер (1, 2, 3, …), кожен елемент у масиві має індекс. Але в більшості мов програмування індекс починається з 0. Отже, перший елемент має індекс 0, другий — 1 і так далі.

  • Має фіксований розмір: Коли ви створюєте список відтворення, скажімо, для 10 пісень, ви не можете додати 11-ту пісню, попередньо не видаливши одну. Так само масиви мають фіксований розмір. Після створення масиву певного розміру ви не можете додати більше елементів, ніж його обсяг.

  • Є однорідним: усі пісні у вашому списку відтворення є музичними треками. Подібним чином усі елементи в масиві мають один тип. Якщо у вас є масив цілих чисел, ви не можете раптом зберегти в ньому текстовий рядок.

  • Має прямий доступ: Якщо ви хочете прослухати сьому пісню у своєму списку відтворення, ви можете перейти безпосередньо до неї. Так само з масивами ви можете миттєво отримати доступ до будь-якого елемента, якщо знаєте його індекс.

  • Безперервна пам'ять: Це трохи технічніше. Коли масив створюється в пам'яті комп'ютера, він займає безперервний блок пам'яті. Подумайте про це як про ряд сусідніх шафок у школі. Кожна шафка стоїть поруч, без проміжків між ними.

Python і масиви

Python, відомий своєю гнучкістю та простотою використання, пропонує кілька способів роботи з масивами. Хоча Python не має рідної структури даних масиву, як деякі інші мови, він надає потужні альтернативи, які можуть функціонувати подібним чином і навіть пропонувати розширені можливості.

На перший погляд, Список Python може здатися синонімом масиву, але є тонкі відмінності та нюанси, які слід враховувати:

список масив
Вбудована структура даних Python Не рідні для Python – вони походять із модуля `array`
Динамічний розмір Фіксований (заздалегідь визначений) розмір
Може зберігати елементи різних типів даних Тримайте предмети одного типу
Надайте низку вбудованих методів маніпулювання Потрібно імпортувати зовнішні модулі
O(1) часова складність для операцій доступу O(1) часова складність для операцій доступу
Споживайте більше пам'яті Більш ефективна пам'ять

Дивлячись на цю таблицю, природно виникає запитання – «Коли використовувати який?». Що ж, якщо вам потрібна колекція, яка може динамічно зростати або звужуватися і може містити змішані типи даних, список Python — це ваш шлях. Однак для сценаріїв, які потребують більш ефективного використання пам’яті колекції з елементами того самого типу, ви можете розглянути можливість використання Python array модуль або зовнішні бібліотеки, такі як NumPy.

Команда масив Модуль на Python

Коли більшість розробників думають про масиви в Python, вони часто думають про списки. Однак Python пропонує більш спеціалізовану структуру масиву через свій вбудований array модуль. Цей модуль забезпечує ефективне зберігання основних типів даних у стилі C у Python.

Хоча списки Python неймовірно універсальні та можуть зберігати будь-які типи об’єктів, іноді вони можуть бути надмірними, особливо коли вам потрібно зберігати лише колекцію основних типів даних, як-от цілі чи числа з плаваючою точкою. The array Модуль забезпечує спосіб створення масивів, які є більш ефективними для пам’яті, ніж списки для певних типів даних.

Створення масиву

Для використання array модуля, вам спочатку потрібно імпортувати його:

from array import array

Після імпорту ви можете створити масив за допомогою array() конструктор:

arr = array('i', [1, 2, 3, 4, 5])
print(arr)

Ось тут 'i' аргумент вказує, що масив буде зберігати знак цілих чисел. Існує кілька інших кодів типів, наприклад 'f' для поплавців і 'd' для парних.

Доступ і зміна елементів

Ви можете отримувати доступ до елементів масиву та змінювати їх так само, як і зі списком:

print(arr[2]) 

А тепер давайте модифікуємо елемент, змінивши його значення на 6:

arr[2] = 6
print(arr) 

Методи масивів

Команда array модуль надає кілька методів для роботи з масивами:

  • append() – Додає елемент у кінець масиву:

    arr.append(7)
    print(arr) 
  • extend() – Додає повторювані елементи в кінець:

    arr.extend([8, 9])
    print(arr) 
  • pop() – Видаляє та повертає елемент у задану позицію:

    arr.pop(2)
    print(arr) 
  • remove(): видаляє перше входження вказаного значення:

    arr.remove(2)
    print(arr) 
  • reverse(): змінює порядок масиву на зворотний:

    arr.reverse()
    print(arr) 

Примітка: Існує більше методів, ніж ми перерахували тут. Зверніться до офіційна документація Python щоб переглянути список усіх доступних методів у array модуль

У той час як array модуль пропонує більш ефективний спосіб зберігання основних типів даних, тому важливо запам’ятати його недоліки. На відміну від списків, масиви є однорідний. Це означає, що всі елементи в масиві мають бути одного типу. Також можна тільки зберігати основні типи даних у стилі C в масивах. Якщо вам потрібно зберігати спеціальні об’єкти або інші типи Python, вам потрібно буде використовувати список або іншу структуру даних.

Масиви NumPy

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

Масиви NumPy більш універсальні, ніж вбудовані в Python array модуль і є основним продуктом у наукових проектах з обробки даних і машинного навчання.

Навіщо використовувати масиви NumPy?

Перше, що спадає на думку продуктивність. Масиви NumPy реалізовані на C і забезпечують ефективне зберігання пам’яті та швидші операції завдяки оптимізованим алгоритмам і перевагам безперервного зберігання пам’яті.

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

Ознайомтеся з нашим практичним практичним посібником із вивчення Git з передовими методами, прийнятими в галузі стандартами та включеною шпаргалкою. Припиніть гуглити команди Git і фактично вчитися це!

Нарешті, NumPy надає a великий набір функцій для роботи з цими масивами, від базових арифметичних до складних математичних операцій, зміни форми, розбиття тощо.

Примітка: Коли ви заздалегідь знаєте розмір даних, попереднє виділення пам’яті для масивів (особливо в NumPy) може призвести до покращення продуктивності.

Створення масиву NumPy

Щоб використовувати NumPy, вам спочатку потрібно встановити його (pip install numpy), а потім імпортуйте його:

import numpy as np

Після імпорту ви можете створити масив NumPy за допомогою array() функція:

arr = np.array([1, 2, 3, 4, 5])
print(arr) 

Ви також можете створювати багатовимірні масиви:

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)

Це дасть нам:

[[1 2 3] [4 5 6] [7 8 9]]

Окрім цих основних способів створення масивів, NumPy надає нам інші розумні способи створення масивів. Одним з яких є arange() метод. Він створює масиви з регулярно зростаючими значеннями:

arr = np.arange(10)
print(arr) 

Інший – це linspace() метод, який створює масиви з заданою кількістю елементів, рівномірно розподілених між заданими початковим і кінцевим значеннями:

even_space = np.linspace(0, 1, 5)
print(even_space) 

Доступ і зміна елементів

Доступ до елементів у масиві NumPy і їх зміна є інтуїтивно зрозумілими:

print(arr[2]) arr[2] = 6
print(arr) 

Практично те саме для багатовимірних масивів:

print(matrix[1, 2]) matrix[1, 2] = 10
print(matrix)

Змінить значення елемента у другому рядку (індекс 1) і третій стовпець (індекс 2):

[[1 2 3] [4 5 20] [7 8 9]]

Зміна форми масиву

NumPy пропонує багато функцій і методів для роботи з масивами. Наприклад, ви можете використовувати reshape() метод до змінити форму масиву. Скажімо, у нас є простий масив:

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print("Original Array:")
print(arr) 

І ми хочемо змінити його на матрицю 3×4. Все, що вам потрібно зробити, це використовувати reshape() метод із бажаними розмірами, переданими як аргументи:


reshaped_arr = arr.reshape(3, 4)
print("Reshaped Array (3x4):")
print(reshaped_arr)

Це призведе до:

Reshaped Array (3x4):
[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]

Матричне множення

Команда numpy.dot() метод використовується для матричне множення. Він повертає скалярний добуток двох масивів. Для одновимірних масивів це внутрішній продукт масивів. Для 2-вимірних масивів це еквівалентно матричне множення, а для ND це a сума продукту над останньою віссю першого масиву та передостанньою віссю другого масиву.

Давайте подивимося, як це працює. Спочатку давайте обчислимо скалярний добуток двох одновимірних масивів (внутрішній добуток векторів):

import numpy as np vec1 = np.array([1, 2, 3])
vec2 = np.array([4, 5, 6])
dot_product_1d = np.dot(vec1, vec2) print("Dot product of two 1-D arrays:")
print(dot_product_1d) 

Це призведе до:

Dot product of two 1-D arrays:
32

32 фактично є внутрішнім добутком двох масивів – (14 + 25 + 3*6). Далі ми можемо виконати матричне множення двох 2-D масивів:


mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[2, 0], [1, 3]])
matrix_product = np.dot(mat1, mat2) print("Matrix multiplication of two 2-D arrays:")
print(matrix_product) 

Що дасть нам:

Matrix multiplication of two 2-D arrays:
[[ 4 6] [10 12]]

Масиви NumPy є значним кроком у порівнянні зі вбудованими списками Python і array модуль, особливо для наукових і математичних обчислень. Їхня ефективність у поєднанні з багатою функціональністю, яку надає бібліотека NumPy, робить їх незамінним інструментом для тих, хто хоче виконувати числові операції на Python.

Висновок

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

У цьому посібнику ми пройшли шлях від основних концепцій масивів до їх практичного застосування в Python. Ми побачили, як масиви, завдяки своїй безперервній природі пам’яті, забезпечують швидкий час доступу, а динамічні списки Python забезпечують додатковий рівень гнучкості. Ми також заглибились у спеціалізований світ NumPy, де масиви перетворюються на потужні інструменти для чисельних обчислень.

Часова мітка:

Більше від Stackabuse