Введение
Представьте, что у вас на телефоне есть плейлист ваших любимых песен. Этот плейлист представляет собой список, в котором каждая песня расположена в определенном порядке. Вы можете воспроизвести первую песню, перейти ко второй, перейти к пятой и так далее. Этот плейлист во многом похож на массив в компьютерном программировании.
Массивы являются одной из наиболее фундаментальных и широко используемых структур данных.
По сути, массив — это структурированный способ хранения нескольких элементов (например, чисел, символов или даже других массивов) в определенном порядке, и вы можете быстро получить доступ, изменить или удалить любой элемент, если знаете его позицию (индекс).
В этом руководстве мы дадим вам полный обзор структуры данных массива. Прежде всего, разберемся, что такое массивы и каковы их основные характеристики. Затем мы перейдем в мир Python, изучая, как массивы реализуются, манипулируются ими и применяются в реальных сценариях.
Понимание структуры данных массива
Массивы являются одними из старейших и наиболее фундаментальных структур данных, используемых в информатике и программировании. Их простота в сочетании с эффективностью в определенных операциях делает их основной темой для всех, кто занимается управлением и манипулированием данными.
Массив — это совокупность элементов, обычно того же типа, Хранится в смежные ячейки памяти.
Это непрерывное хранилище позволяет массивам обеспечивать постоянный доступ к любому элементу по его индексу. Каждый элемент массива называется элемент, а положение элемента в массиве определяется его индекс, который обычно начинается с нуля.
Например, рассмотрим массив целых чисел: [10, 20, 30, 40, 50]
. Здесь элемент 20
имеет индекс 1
:
Есть несколько Преимущества использования массивов для хранения наших данных. Например, благодаря своей структуре памяти массивы позволяют 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 невероятно универсальны и могут хранить объекты любого типа, иногда они могут быть излишними, особенно когда вам нужно хранить только коллекцию базовых типов данных, таких как целые числа или числа с плавающей запятой. 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 предоставляет обширный набор функций для работы с этими массивами: от базовой арифметики до сложных математических операций, изменения формы, разделения и многого другого.
Примечание: Если вы заранее знаете размер данных, предварительное выделение памяти для массивов (особенно в 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()
метод используется для умножение матриц. Он возвращает скалярное произведение двух массивов. Для одномерных массивов это внутренний продукт массивов. Для двумерных массивов это эквивалентно умножение матриц, а для ND это суммарный продукт по последней оси первого массива и предпоследней оси второго массива.
Давайте посмотрим, как это работает. Во-первых, давайте вычислим скалярное произведение двух одномерных массивов (внутреннее произведение векторов):
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). Далее мы можем выполнить матричное умножение двух двумерных массивов:
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, где массивы превращаются в мощные инструменты для числовых вычислений.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- PlatoData.Network Вертикальный генеративный ИИ. Расширьте возможности себя. Доступ здесь.
- ПлатонАйСтрим. Интеллект Web3. Расширение знаний. Доступ здесь.
- ПлатонЭСГ. Углерод, чистые технологии, Энергия, Окружающая среда, Солнечная, Управление отходами. Доступ здесь.
- ПлатонЗдоровье. Биотехнологии и клинические исследования. Доступ здесь.
- Источник: https://stackabuse.com/guide-to-arrays-in-python/
- :имеет
- :является
- :нет
- :куда
- $UP
- 1
- 10
- 11
- 12
- 13
- 16
- 20
- 25
- 30
- 32
- 40
- 50
- 7
- 8
- 9
- a
- О нас
- доступ
- доступа
- через
- на самом деле
- Добавить
- добавленный
- Дополнительно
- Добавляет
- примыкающий
- продвижение
- продвинутый
- плюс
- снова
- Оповещение
- алгоритмы
- Все
- позволять
- позволяет
- причислены
- альтернативы
- среди
- an
- и
- Другой
- любой
- кто угодно
- Приложения
- прикладной
- МЫ
- аргумент
- Аргументы
- массив
- AS
- спросить
- At
- доступен
- избежать
- Ось
- основной
- BE
- начало
- полезный
- Преимущества
- Кроме
- Лучшая
- между
- Немного
- Бленд
- Заблокировать
- граница
- приносить
- встроенный
- но
- by
- Кэш
- под названием
- CAN
- не могу
- возможности
- Пропускная способность
- определенный
- изменение
- менялась
- изменения
- характеристика
- символы
- Коды
- лыжных шлемов
- Column
- сочетании
- как
- выходит
- сложность
- комплексный
- вычисление
- расчеты
- Вычисление
- компьютер
- Информатика
- понятия
- заключение
- Рассматривать
- постоянная
- (CIJ)
- краеугольный камень
- Создайте
- создали
- создает
- изготовленный на заказ
- данным
- управление данными
- наука о данных
- Структура данных
- По умолчанию
- определенный
- желанный
- застройщиков
- Различия
- различный
- размеры
- направлять
- непосредственно
- do
- приносит
- доменов
- DOT
- Парный
- два
- динамический
- динамично
- каждый
- простота
- простота в использовании
- легче
- затрат
- эффективный
- элемент
- элементы
- конец
- одинаково
- Эквивалент
- ошибки
- особенно
- сущность
- существенный
- Даже
- пример
- Исследование
- и, что лучший способ
- факт
- БЫСТРО
- быстрее
- Избранное
- Особенности
- Во-первых,
- фиксированной
- Трансформируемость
- Фокус
- Что касается
- частое
- от
- функция
- функциональность
- Функции
- фундаментальный
- пробелы
- идти
- Дайте
- данный
- взгляд
- Go
- Расти
- инструкция
- практический
- Есть
- здесь
- держать
- зависать
- Как
- Однако
- HTML
- HTTPS
- i
- ICON
- идеальный
- if
- иллюстрировать
- в XNUMX году
- Импортировать
- улучшение
- in
- включены
- В том числе
- невероятно
- индекс
- индексированный
- указывает
- устанавливать
- пример
- немедленно
- в
- Введение
- интуитивный
- вопросы
- IT
- пункты
- ЕГО
- Прыгать
- всего
- Знать
- известный
- Языки
- большой
- Фамилия
- слой
- Планировка
- вести
- ведущий
- изучение
- позволять
- LG
- библиотеки
- Библиотека
- такое как
- недостатки
- Список
- Включенный в список
- Списки
- ll
- Ящик
- логический
- посмотреть
- искать
- серия
- машина
- обучение с помощью машины
- Главная
- ДЕЛАЕТ
- Создание
- управлять
- управление
- манипулировать
- Манипуляция
- многих
- математический
- матрица
- означает
- Память
- метод
- методы
- средняя
- может быть
- против
- смешанный
- изменять
- Модули
- БОЛЕЕ
- самых
- много
- с разными
- Музыка
- должен
- родной
- природа
- Необходимость
- следующий
- нет
- примечательный
- сейчас
- нюансы
- номер
- номера
- NumPy
- объект
- объекты
- занимает
- вхождение
- of
- предлагают
- Предложения
- .
- самый старший
- on
- консолидировать
- ONE
- только
- работать
- Операционный отдел
- оптимизированный
- or
- заказ
- оригинал
- Другое
- наши
- внешний
- за
- общий
- обзор
- собственный
- пакет
- особенно
- Прошло
- Выполнять
- производительность
- Телефон
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- Играть
- должность
- мощный
- практическое
- довольно
- первичный
- Продукт
- Программирование
- языки программирования
- проектов
- доказанный
- обеспечивать
- при условии
- приводит
- Питон
- быстро
- случайный
- ассортимент
- быстро
- реальный мир
- область
- относиться
- регулярно
- остатки
- помнить
- удаление
- удаление
- представляющий
- требуется
- перекроить
- изменения формы
- результат
- Возвращает
- Богатые
- кольцо
- РЯД
- s
- то же
- сообщили
- Сценарии
- Школа
- Наука
- научный
- Во-вторых
- посмотреть
- казаться
- видел
- набор
- несколько
- Shadow
- Форма
- лист
- СДВИГАЯ
- Короткое
- сторона
- подписанный
- значительный
- Аналогичным образом
- просто
- простота
- с
- Размер
- небольшой
- So
- некоторые
- иногда
- песня
- специализированный
- конкретный
- указанный
- Стекабьюс
- стоять
- стандартов
- штапель
- начинается
- Шаг
- Stop
- диск
- магазин
- хранить
- строка
- Структура
- структурированный
- структур
- такие
- SVG
- синонимичный
- ТАБЛИЦЫ
- взять
- Технический
- текст
- чем
- который
- Ассоциация
- мир
- их
- Их
- тогда
- Там.
- Эти
- они
- задача
- think
- мышление
- В третьих
- этой
- Через
- время
- раз
- в
- слишком
- инструментом
- инструменты
- тема
- традиционный
- Transform
- переход
- правда
- два
- напишите
- Типы
- типично
- Неожиданный
- В отличие от
- us
- использование
- используемый
- через
- обычно
- ценностное
- Наши ценности
- различный
- Ve
- разносторонний
- многосторонность
- хотеть
- Путь..
- способы
- we
- ЧТО Ж
- Что
- когда
- который
- в то время как
- широко
- будете
- без
- Работа
- работает
- Мир
- стоимость
- бы
- Ты
- ВАШЕ
- зефирнет