Руководство по индексации и срезам массивов NumPy: Полное руководство
Это полное руководство научит вас всем различным способам индексации и среза массивов NumPy. NumPy является необходимой библиотекой для любого аналитика данных или ученого-данных, использующего Python. Эффективная индексация и срезание массивов NumPy могут сделать вас более сильным программистом.
К концу этого руководства вы узнаете:
Как работает индексирование и нарезка массива NumPy
Как индексировать одномерные, двумерные и трехмерные массивы
Как разрезать массивы NumPy, используя диапазоны, условия и т. д.
Оглавление
Понимание индексации массива NumPy
Так же, как и при работе со списками Python, массивы NumPy основаны на индексации с нуля. Это означает, что индексация начинается с позиции 0 и продолжается до длины списка минус 1. Точно так же массивы NumPy могут индексироваться отрицательно, что означает, что к их последнему элементу можно обратиться, используя значение
Массивы NumPy выходят за рамки базовых списков Python благодаря наличию ряда особенностей. Тем не менее, многие функции, доступные для списков Python (такие как индексация и срезы), также применимы к массивам NumPy.
Как получить доступ к одномерным элементам массива NumPy с помощью индексации
Давайте посмотрим, как мы можем получить доступ к первому элементу в массиве NumPy, используя стандартный синтаксис Python x[obj]
, где x
- это массив, а obj
- это выбор:
Этот код выводит первый элемент массива NumPy arr
.
В приведенном выше коде мы смогли получить доступ к первому элементу, индексируя индекс 0. Аналогично, мы можем получить доступ к последнему элементу в массиве NumPy, используя индекс -1, как показано ниже:
Этот код выводит последний элемент массива NumPy arr
.
Теперь, когда вы научились индексировать одномерные массивы, давайте посмотрим, как можно получить доступ к элементам посредством индексации в двумерных массивах.
Как получить доступ к элементам двумерного массива NumPy с помощью индексации
Доступ к элементам двумерных массивов NumPy можно осуществить несколькими полезными способами. Давайте сначала посмотрим, как получить доступ к элементам, используя традиционную индексацию Python, загрузив двумерный массив и применив двойную индексацию массива:
Этот код выводит первый элемент второго массива в массиве NumPy arr
.
Мы видим, что, получив доступ к индексу 0, а затем к индексу 1, мы можем получить доступ ко второму элементу первого массива. Этот подход работает так же, как и доступ к элементам во вложенных списках.
Давайте рассмотрим другой метод, специфичный для NumPy, который позволяет обращаться к элементам двумерного массива NumPy.
Этот код также выводит первый элемент второго массива в массиве NumPy arr
, но использует индексацию с использованием одной пары квадратных скобок для обращения к элементу.
Этот подход значительно упрощает код. Передавая один индексный элемент, содержащий два объекта, мы можем обращаться к нескольким измерениям. Этот метод также более эффективен – он работает без создания нового, временного массива
Кроме того, вы можете комбинировать это с отрицательной индексацией. Это может быть особенно полезно, когда вы не знаете, сколько элементов в массиве! Давайте посмотрим, как мы можем получить доступ к последнему элементу первого массива:
Этот код выводит последний элемент первого массива в массиве NumPy arr
с использованием отрицательной индексации для обращения к элементу.
Это позволяет вам комбинировать как положительные, так и отрицательные индексы при индексации массива.
Теперь, когда вы научились работать с двумерными массивами, давайте рассмотрим индексацию трехмерных массивов.
Как получить доступ к элементам трехмерного массива NumPy с помощью индексации
Доступ к элементам в трехмерных массивах NumPy работает почти так же, как и работа с двумерными массивами. Поскольку мы знаем, что доступ к элементам более эффективно осуществляется с использованием одних квадратных скобок, давайте посмотрим, как мы можем работать с трехмерными массивами:
Этот код выводит первый элемент первого массива в последнем массиве в массиве NumPy arr
с использованием отрицательной индексации.
В приведенном выше примере мы создаем массив формы (2, 2, 2)
. Способ работы индексации заключается в том, что доступ к данным осуществляется снаружи внутрь. В данном случае мы обращаемся к последнему массиву, затем к первому массиву и, наконец, к первому значению - возвращая значение 5.
Нарезка и перемещение массивов NumPy
Аналогично спискам в Python, вы можете использовать срезы и шаги для работы с массивами NumPy. Это позволяет обращаться сразу к нескольким элементам массива, начиная с определенной позиции и заканчивая другой, с заданным интервалом. Давайте рассмотрим более простой пример, где мы получаем доступ к элементам, начиная со второго и заканчивая предпоследним:
Этот код выводит срез массива NumPy arr
с элементами, начиная со второго и заканчивая предпоследним.
При использовании среза возвращаются значения массива от начала и до (но не включая) конечного значения
Значение до или после двоеточия :
является необязательным: если число опущено, то массив разделен от первого до последнего элементов соответственно.
Мы также можем перебирать массив с определенным интервалом, используя третий, необязательный аргумент в срезе. Это следует за соглашением [start : stop : stride]
, где stride по умолчанию равно 1. Давайте посмотрим, как мы можем перебирать массив NumPy с первого до последнего элемента с интервалом в 2:
Этот код выводит каждый второй элемент массива NumPy arr
.
В следующем разделе вы узнаете, как использовать индексацию массивов целых чисел в NumPy для доступа к нескольким элементам.
Индексирование целочисленного массива в NumPy для доступа к нескольким элементам
Вы можете легко получить доступ к нескольким элементам в массиве NumPy, используя для индексации список элементов. Это позволяет легко получить доступ к нескольким элементам, не нуждаясь в многократном индексировании массива.
Давайте посмотрим, как это делается, получив доступ к первому и третьему элементам массива:
Этот код выводит элементы массива NumPy arr
с индексами 0 и 2.
Важно отметить, что при индексировании вы передаете список значений (обратите внимание на двойные квадратные скобки).
Этот метод также работает с отрицательными индексами, как показано ниже:
Этот код выводит элементы массива NumPy arr
с индексами 0 и 2.
Аналогично, порядок индексов не обязательно должен быть последовательным! Вы можете получать доступ к элементам в любом порядке, который захотите. В примере ниже мы сначала получаем доступ к третьему элементу, а затем к первому:
Этот код выводит элементы массива NumPy arr
с индексами 2 и 0.
В следующем разделе вы узнаете, как использовать индексацию с помощью булевых значений в массивах NumPy для условного среза.
Логическое индексирование в массивах NumPy для условной нарезки
Использование индексации с помощью булевых массивов в NumPy значительно упрощает выбор элементов, удовлетворяющих определенному условию. Этот процесс значительно проще и понятнее, чем обычные способы фильтрации списков. Давайте посмотрим, как мы можем использовать булеву индексацию для выбора только значений меньше 3:
Этот код выводит элементы массива NumPy arr
, которые меньше 3, используя логическое индексирование.
Давайте разберем, что мы делаем в приведенном выше коде:
Мы создаем булев массив, оценивая выражение
arr < 3
, что возвращает массив булевых значений элементов, соответствующих условию.Используем этот булев массив для индексации, возвращая только значения меньше 3
Аналогично, этот метод можно использовать для более сложной фильтрации. Например, если мы хотим вернуть только четные элементы, мы можем использовать оператор модуло для фильтрации нашего массива:
Этот код выводит четные элементы массива NumPy arr
, используя логическое индексирование.
Заключение
В этом учебном пособии вы научились индексировать массивы NumPy. Сначала вы научились использовать простое индексирование, которое позволяет получить доступ к отдельному значению. Затем вы научились работать с двумерными и трехмерными массивами. После этого вы изучили, как делать срезы и шаги по массивам NumPy, аналогично работе со списками Python. Наконец, вы научились использовать мощное булево индексирование, чтобы индексировать массивы на основе условия.
Дополнительные ресурсы
Чтобы узнать больше о смежных темах, ознакомьтесь с приведенными ниже учебными материалами:
Last updated