В этой статье я хочу рассказать о нескольких функциях Numpy, которые я использую для анализа данных постоянно. Это ни в коем случае не исчерпывающий список, но думаю, что инструменты, о которых пойдёт речь, пригодятся каждому без исключения.
![](https://habrastorage.org/getpro/habr/post_images/e37/598/fd4/e37598fd4065488e33d856ed9ed95743.png)
Сталкиваясь с новой задачей, я раз за разом думал: «Это достаточно специфичная вещь, вряд ли для неё найдётся встроенная функция». В случае с Numpy, чаще я был неправ, чем прав.
Но давайте ближе к делу. Единственная строка импорта, которая нам нужна:
![](https://habrastorage.org/getpro/habr/post_images/fc4/f21/f17/fc4f21f1739c91be23b8561465e3975a.png)
where()
Функция where() возвратит элементы, удовлетворяющие определённому условию. Посмотрим на примере.
Создадим список оценок (произвольных):
![](https://habrastorage.org/getpro/habr/post_images/850/78d/068/85078d068a983e21d188e9451050dd38.png)
Теперь можно воспользоваться where(), чтобы найти оценки большие, скажем, чем 3:
![](https://habrastorage.org/getpro/habr/post_images/93e/cce/4bb/93ecce4bbabc4c6969fe4c0b28de0532.png)
Обратите внимание, что возвращаются индексы искомых элементов.
Но это, разумеется, ещё не всё, функция может принимать два опциональных параметра:
- первый заменит собой значения, удовлетворяющие условию
- второй сделает это для значений, условию не удовлетворяющих
![](https://habrastorage.org/getpro/habr/post_images/090/035/644/090035644906634916e57b93f1175d72.png)
Поскольку статья задумана краткой, на этом и остановимся.
argmin(), argmax(), argsort()
Функция argmin() возвращает индекс минимального значения. Для того же массива оценок, что мы использовали выше, результат будет:
![](https://habrastorage.org/getpro/habr/post_images/ed6/bba/4b7/ed6bba4b76503595bad9ba7eb7361595.png)
argmax(), как вы наверняка догадались, делает прямо противоположное — возвращает индекс максимального элемента:
![](https://habrastorage.org/getpro/habr/post_images/5d0/b6a/821/5d0b6a8214e5d2a952c39bf83346bcc6.png)
Последняя из троицы argsort() вернёт список индексов отсортированных элементов массива. Не забывайте про неё: вы столкнётесь с огромным количеством ситуаций, когда это нужно.
![](https://habrastorage.org/getpro/habr/post_images/6c6/e4f/683/6c6e4f68315415f5603218d775ed1cd2.png)
intersect1d()
Функция intersect1d() возвратит пересечение двух массивов, т.е. уникальные элементы, которые встречаются в обоих. В отличие от предыдущих примеров, она вернёт не индексы, а сами значения.
Создадим два массива:
![](https://habrastorage.org/getpro/habr/post_images/84a/b0f/753/84ab0f7531f790442dc938a1dce7e5e0.png)
Найдём общие элементы:
![](https://habrastorage.org/getpro/habr/post_images/541/923/3dc/5419233dc86ddbd616c1b5486f5b1299.png)
allclose()
Напоследок рассмотрим функцию allclose(). Она возвратит True, если элементы двух массивов равны в пределах допуска. Опять же, вы не представляете, как часто это нужно при работе с данными.
Объявим два массива, разница между соответствующими элементами которых не более 0.2:
![](https://habrastorage.org/getpro/habr/post_images/714/0f9/256/7140f92566104d690acdb58dab273648.png)
Функция allclose() с допуском в 0.1 должна вернуть False:
![](https://habrastorage.org/getpro/habr/post_images/be3/fe7/31a/be3fe731a7dd289b1a4af8f0c04f9640.png)
Повысим допуск до 0.2, чтобы получить приблизительное равенство массивов:
![](https://habrastorage.org/getpro/habr/post_images/224/c8e/609/224c8e60927e52c78986cc9e89ea1be7.png)
Напутствие
Не счесть количество раз, когда я был (и есть) виноват в изобретении колеса. Часто мы думаем, что наша проблема уникальна, и никто не догадался создать инструмент для её решения. Иногда это правда, но часто чувствуешь себя последним идиотом, найдя удобную стандартную функцию взамен той, на создание которой уже потратил кучу времени.
Потратьте лучше немного этого времени на изучение возможностей популярных библиотек, ведь именно благодаря им библиотеки и стали популярны.
Спасибо за чтение.