Learn AI with Python · Урок

Распространение и векторизованные операции

Как работает распространение, поэлементные операции и отказ от циклов с помощью векторизации.

Урок 3 из 413 шагов

«Распространение и векторизованные операции» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

Зачем нужна векторизация

NumPy обрабатывает целые массивы со скоростью, близкой к скорости кода на C. Замена циклов Python выражениями над массивами, называемая векторизацией, часто ускоряет вычисления в 10–100 раз.

Поэлементные операции

Арифметические операторы применяются к каждому элементу, если формы совпадают. Цикл не требуется.

import numpy as np
a = np.array([1, 2, 3])
b = np.array([10, 20, 30])
print(a + b)   # [11 22 33]
print(a * b)   # [10 40 90]

Распространение скаляра

Операция между массивом и скаляром применяет скаляр к каждому элементу. Скаляр «распространяется» по всему массиву.

a = np.array([1, 2, 3, 4])
print(a * 10)   # [10 20 30 40]
print(a + 100)  # [101 102 103 104]

Что такое распространение

Распространение позволяет NumPy объединять массивы разных форм, виртуально растягивая меньший массив без копирования памяти.

Правило распространения

Сравнивайте формы, начиная с последнего (крайнего справа) измерения. Два измерения совместимы, если они равны или одно из них равно 1. Измерение размера 1 растягивается до нужного размера.

# (3, 4) with (4,)   -> compatible (trailing 4 matches)
# (3, 4) with (3, 1)  -> compatible (1 stretches to 4)
# (3, 4) with (3,)    -> ERROR (trailing 4 vs 3)

Распространение вектора-строки

Одномерный массив длиной, равной числу столбцов, прибавляется к каждой строке.

m = np.array([[1, 2, 3], [4, 5, 6]])
row = np.array([10, 20, 30])
print(m + row)
# [[11 22 33]
#  [14 25 36]]

Распространение вектора-столбца

Измените форму вектора на форму столбца (n,1), чтобы он распространялся по столбцам, а не по строкам.

col = np.array([[100], [200]])   # shape (2, 1)
print(m + col)
# [[101 102 103]
#  [204 205 206]]

Центрирование данных (практическое применение)

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

data = np.array([[1.0, 10.0], [2.0, 20.0], [3.0, 30.0]])
centered = data - data.mean(axis=0)
print(centered)
# columns now have mean 0

Универсальные функции

NumPy предоставляет быстрые поэлементные математические функции, называемые универсальными функциями: np.sqrt, np.log, np.exp и другие. Они поддерживают векторизацию и распространение.

a = np.array([1.0, 4.0, 9.0, 16.0])
print(np.sqrt(a))   # [1. 2. 3. 4.]
print(np.log(a))    # natural log of each element
print(np.exp([0, 1]))  # [1.        2.71828183]

Скорость цикла и векторизации

Одинаковое вычисление в векторизованном виде значительно быстрее. Используйте %timeit, чтобы ощутить разницу на миллионе элементов.

big = np.arange(1000000, dtype=float)
# Slow Python loop:
# %timeit [x*x for x in big]
# Fast vectorized:
%timeit big * big   # typically tens of times faster

Объединение векторизации

Объединяйте универсальные функции и арифметические операции, чтобы напрямую записывать формулы. Так можно вычислить гауссову кривую без циклов.

x = np.linspace(-3, 3, 7)
y = np.exp(-x**2 / 2)
print(np.round(y, 3))

Проверка знаний

Проверьте, насколько хорошо Вы понимаете распространение.

Повторение

Основы векторизации:

  • Поэлементные операции позволяют избежать циклов Python и выполняются со скоростью C
  • Распространение выравнивает последние измерения; размеры должны совпадать или быть равны 1
  • Используйте векторы-столбцы (n,1), чтобы распространять значения вниз по столбцам
  • Универсальные функции: np.sqrt, np.log, np.exp
  • Центрируйте данные с помощью data - data.mean(axis=0)
Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
53
Уроки
225

Часто задаваемые вопросы

Урок «Распространение и векторизованные операции» бесплатный?

Да — полный текст урока «Распространение и векторизованные операции» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Распространение и векторизованные операции»?

Как работает распространение, поэлементные операции и отказ от циклов с помощью векторизации. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Распространение и векторизованные операции»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Создание массивов и их свойства
  2. Индексация, срезы и расширенная индексация
  3. Распространение и векторизованные операции
  4. Линейная алгебра с NumPy
← Назад к Learn AI with Python