Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Введение Python: Numpy-массивы

Numpy

В последние десятилетия цифровизация и автоматизация привели к накоплению больших объемов информации. Эти накопленные данные стали полезным источником информации для бизнеса, но принесли с собой много инфраструктурных проблем и головной боли разработчиков. Так появилась потребность в Data Mining — глубоком анализе данных с применением методов машинного обучения. Он выявляет неочевидные закономерности и таким образом решает бизнес-задачи.

Стандартные типы языка Python и его встроенные методы помогают решать разные аналитические задачи с данными. Но изначально Python не задумывался для таких задач, и поэтому не всегда стандартных инструментов достаточно. Для решения более сложных аналитических задач была разработана библиотека Numpy ("Numerical Python extensions"). В основном она направлена на удобство работы с массивами данных и ускорение вычислений с ними.

Особенности библиотеки Numpy

В Numpy используется особый тип данных — массив. Чтобы его создать, нужно конвертировать данные из списка (list). Посмотрим, как это выглядит в коде:

# Импортируем библиотеку numpy
import numpy

# Создаем пример списка языка Python
list_of_numbers = [1, 2, 3, 4, 5]

# Конвертируем созданный список в массив Numpy
ndarray_of_numbers = numpy.array(list_of_numbers)

# Тип созданного объекта
print(type(ndarray_of_numbers))
# => <class 'numpy.ndarray'>

# Результат стандартного вывода
print(ndarray_of_numbers)
# => [1 2 3 4 5]

Работа с массивами в некоторых операциях аналогична действиями над списками, но предоставляет ряд дополнительных возможностей. Например, различие есть в операциях получения элементов по списку индексов — типом list она не поддерживается:

indexes = [0,3,4]
print(ndarray_of_numbers[indexes])
# => [1 4 5]

Еще Numpy упрощает логику арифметических операций. Например, вот так выглядят операции сложения и умножения массива на число:

print(ndarray_of_numbers)
# => [1 2 3 4 5]
print(2 * ndarray_of_numbers)
# => [ 2  4  6  8 10]
print(5 + ndarray_of_numbers)
# => [ 6  7  8  9 10]

Если бы мы работали со списками, для тех же операций потребовался бы еще и генератор списков:

print(list_of_numbers)
# => [1, 2, 3, 4, 5]
print([2 * num for num in list_of_numbers])
# => [2, 4, 6, 8, 10]
print([5 + num for num in list_of_numbers])
# => [6, 7, 8, 9, 10]

Кроме того, Numpy ускоряет многие операции, что особенно заметно при работе с большими массивами. На примере ниже посмотрим, за какое время находится максимальный элемент списка и массива Numpy с аналогичным набором элементов:

# Импортируем модуль time для замера времени
import time

# Создаем список из 1,000,000 элементов
large_list_of_numbers = list(range(1_000_000))

# Конвертируем созданный список в массив Numpy
ndarray_of_numbers = numpy.array(large_list_of_numbers)

# Замеряем время выполнения 100 итераций
# нахождения максимального элемента списка
start_time = time.time()
for _ in range(100):
    max(large_list_of_numbers)
end_time = time.time()

print(f'Total time for a large list: {round(end_time - start_time, 2)} s')
# => Total time for large list: 1.49 s

# Замеряем время выполнения 100 итераций
# нахождения максимального элемента массива Numpy
start_time = time.time()
for _ in range(100):
    ndarray_of_numbers.max()
end_time = time.time()

print(f'Total time for a ndarray: {round(end_time - start_time, 2)} s')
# => Total time for ndarray: 0.06 s

Время выполнения в примере выше может отличаться в зависимости от производительности среды. Тем не менее операции над массивом Numpy в любом случае происходят в разы быстрее аналогичных операций над списком.

Еще одно преимущество библиотеки Numpy — широкая функциональность. Она включает в себя разные математические функции, модули для работы со случайными числами и матрицами, а также с преобразованиями Фурье.

Производительность Numpy, широкий спектр методов работы с массивами и удобный интерфейс подтолкнули разработчиков использовать библиотеку в качестве основы для модулей. Например, есть такие модули для работы с:

  • Табличными данными — Pandas
  • Визуализацией данных — Matplotlib, Plotly, Seaborn
  • Алгоритмами машинного обучения — Sklearn
  • Тензорами и глубокими нейронными сетями — TensorFlow
  • Изображениями — OpenCV

Выводы

В самом начале курса мы познакомимся с основным компонентом библиотеки Numpy — массивом numpy.ndarray. Далее вы научитесь конвертировать стандартные структуры языка Python в указанный тип данных, а также использовать разные методы работы с данными.

Чтобы доступнее объяснить такие непростые темы, мы воспользуемся примерами из практики — поможем гипотетическому бизнесу с анализом данных по работе сети магазинов.

Даже если вы не работаете аналитиком, вы почерпнете из курса много полезных практик. Эти знания помогут оптимизировать программы так, чтобы они работали в разы быстрее благодаря библиотеке Numpy.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 5 025 ₽ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 25 апреля

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»