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

Уход от циклов и векторизованные вычисления Python: Numpy-массивы

Numpy

Библиотека Numpy помогает придерживаться двух принципов:

  • Упрощение разработки и поддержки готового кода
  • Оптимизация вычислений

Для этого разработчики библиотеки использовали следующие подходы и механизмы:

  • Одинаковый интерфейс методов для выполнения операций над массивами разной размерности и типа
  • Укладывание и векторизация для замены циклов

В этом уроке мы рассмотрим примеры векторизованных функций и методов — причем и встроенных в Numpy, и реализованных самостоятельно.

Арифметические операции

Начнем с самой простой арифметической операции — сложения:

import numpy as np

# Сумма элементов вектора
test_vector = np.array([1,5,9])
print(np.sum(test_vector))
# => 15

# Сумма элементов матрицы
test_matrix = np.array(
    [
        [2, 4, 6],
        [1, 2, 8],
    ]
)
print(np.sum(test_matrix))
# => 23

Интерфейс функции np.sum() позволяет применять ее к массивам разной размерности без изменения синтаксиса. Реализация без циклов делается в одну строчку кода как для векторов, так и для матриц.

В случае одномерной структуры (вектора) сложение элементов можно производить только по одному направлению. В случае матрицы все немного по-другому — их элементы можно складывать по двум осям:

  • По строкам
  • По столбцам

Для суммирования по каждой из осей достаточно параметризовать функцию np.sum() таким образом:

# Сумма элементов матрицы по столбцам
print(np.sum(test_matrix, axis=0))
# => [ 3  6 14]

# Сумма элементов матрицы по строкам
print(np.sum(test_matrix, axis=1))
# => [12 11]

Интерфейс многих функций библиотеки Numpy сделан по аналогии с np.sum(). Например, чтобы найти средние значения в матрице по строкам и столбцам, можно воспользоваться функцией np.mean() с теми же параметрами:

# Среднее элементов матрицы по столбцам
print(np.mean(test_matrix, axis=0))
# => [1.5 3.  7. ]

# Среднее элементов матрицы по строкам
print(np.mean(test_matrix, axis=1))
# => [4. 3.67]

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

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

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

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

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

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

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

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

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