Python: Numpy
Теория: Индексы, срезы и итеративный обход
Массивы данных в Python можно разделить на два типа по наличию или отсутствию порядка элементов. Например:
- Множество
setили словарьdictотносятся к неупорядоченным данным — не удастся обойти их по индексу - Зато такая возможность есть со списком
listили кортежемtuple— у их элементов индексы есть
Для массивов numpy.ndarray порядок элементов важен, потому что он помогает ускорить обработку данных. Его индексация похожа на индексацию списка list. В этом уроке подробнее разберем эту тему, а также поговорим о правилах и методах работы с индексами массивов numpy.ndarray.
Правила индексирования массивов
Возьмем пример из прошлого урока и добавим к нему чуть больше данных:
Получим элемент массива numpy.ndarray. Здесь принцип такой же, как с получением элемента списка:
Отрицательные целые значения также применимы к индексации массивов numpy.ndarray:
В многомерном случае делается все по аналогии:
Выше мы рассмотрели два способа получения элементов массива. Лучше всего использовать последний, потому что он выполняется за меньшее время. Причины станут ясны дальше, после знакомства с операцией среза.
Операции среза данных
Операция среза — это удобный и распространенный способ получить некоторое подмножество элементов, идущих подряд. Срез помогает сократить время выполнения подвыборки за счет того, что не нужно использовать циклы:
Рассмотрим примеры срезов:
Срезы многомерных массивов упрощают операции со списками:
В примере выше мы вырезали элементы из верхнего левого квадрата исходной таблицы размером 2x2. Чтобы решить такую задачу с помощью списков, нужно было бы писать дополнительный код, тратить больше времени и сил.
Еще одна востребованная операция с многомерными массивами — получение строк и столбцов значений. Снова используем срезы массива numpy.ndarray и реализуем задачу таким образом:
Итеративный обход
Как мы говорили выше, в работе с массивами лучше не пользоваться циклами. Если есть возможность, лучше обходить элементы в нужном порядке с возможным периодическим пропуском элементов — так мы экономим время выполнения:
Знак шага указывает на порядок обхода: плюс говорит о восходящем порядке обхода индексов, минус — об обратном. Значение шага задает период обхода. Аналогичный синтаксис применим и для многомерных массивов:
Закрепим знания на практике
Воспользуемся недельными данными по продажам сети магазинов:
Подготовим данные для решения задач:
А теперь пошагово выполним три задачи.
Задача 1. Оставить только первые два магазина:
Задача 2. Оставить в рассмотрении данные продаж за выходные дни:
Задача 3. Сделать обратный порядок дней в таблице:
Выводы
В этом уроке мы изучили основные методы работы с индексами массивов. Индексация, срезы и итеративный обход списков list синтаксически похожи на операции над массивами numpy.ndarray. Однако есть и некоторые особенности, которые позволяют упростить и ускорить работу с подвыборками элементов массивов Numpy.



