Операции над массивами и broadcasting
Выполняйте векторизованные арифметические операции и изучайте правила broadcasting.
«Операции над массивами и broadcasting» — бесплатный урок Python Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Векторизованная арифметика
NumPy применяет арифметические операции поэлементно ко всему массиву без циклов Python — вычисления выполняются в оптимизированном коде C.
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b) # [5 7 9]
print(a * b) # [4 10 18]
print(a ** 2) # [1 4 9]Универсальные функции (ufuncs)
Универсальные функции NumPy применяют поэлементные функции на уровне C: np.sqrt, np.exp, np.log, np.sin и другие.
import numpy as np
x = np.linspace(0, np.pi, 5)
print(np.sin(x)) # [0. 0.707 1. 0.707 0.]
print(np.exp([1.0, 2.0, 3.0])) # [2.718 7.389 20.086]Операции свёртки
Сведите массив к скаляру (или массиву с меньшим числом измерений) с помощью np.sum, np.mean, np.max, np.min, np.std.
import numpy as np
m = np.array([[1, 2, 3], [4, 5, 6]])
print(np.sum(m)) # 21
print(np.sum(m, axis=0)) # [5 7 9] — sum each column
print(np.sum(m, axis=1)) # [6 15] — sum each rowПравила broadcasting
Broadcasting растягивает меньшие массивы до размера больших — без копирования данных. Правило: измерения выравниваются справа налево; измерения размера 1 растягиваются.
import numpy as np
a = np.array([[1], [2], [3]]) # shape (3,1)
b = np.array([10, 20, 30]) # shape (3,)
print(a + b)
# [[11 21 31]
# [12 22 32]
# [13 23 33]]Broadcasting скалярных операций
Скаляр распространяется на все элементы массива.
import numpy as np
arr = np.arange(6).reshape(2, 3)
print(arr + 10)
# [[10 11 12]
# [13 14 15]]
print(arr * 0.5)
# [[0. 0.5 1. ]
# [1.5 2. 2.5]]Операции сравнения и логические операции
Сравнения создают логические массивы. Объединяйте их с помощью &, |, ~ (а не Python-операторов and/or/not).
import numpy as np
arr = np.array([1, 5, 3, 8, 2])
print(arr > 3) # [False True False True False]
print(arr[(arr > 2) & (arr < 7)]) # [5 3]where()
np.where(condition, x, y) возвращает элементы из x там, где значение True, и из y там, где значение False.
import numpy as np
arr = np.array([-2, 3, -1, 4, 0])
result = np.where(arr >= 0, arr, 0) # clip negatives to 0
print(result) # [0 3 0 4 0]Агрегирование вдоль осей
Укажите axis=, чтобы выполнить свёртку вдоль определённого измерения многомерного массива.
import numpy as np
data = np.arange(12).reshape(3, 4)
print(data.mean(axis=0)) # mean of each column → shape (4,)
print(data.mean(axis=1)) # mean of each row → shape (3,)cumsum и diff
np.cumsum вычисляет накопительные суммы; np.diff вычисляет разности между соседними элементами.
import numpy as np
prices = np.array([100, 110, 105, 115])
print(np.cumsum(prices)) # [100 210 315 430]
print(np.diff(prices)) # [10 -5 10] (daily changes)Векторизованные операции со строками
np.char предоставляет векторизованные операции со строками в массивах строк.
import numpy as np
words = np.array(["apple", "banana", "cherry"])
print(np.char.upper(words)) # ['APPLE' 'BANANA' 'CHERRY']
print(np.char.startswith(words, "a")) # [True False False]Производительность по сравнению со списками Python
NumPy в 10–100 раз быстрее эквивалентных циклов Python при числовых вычислениях, потому что выполняет их в C без накладных расходов интерпретатора Python.
import numpy as np, time
n = 1_000_000
start = time.perf_counter()
python_sum = sum(i**2 for i in range(n))
print(f"Python: {time.perf_counter()-start:.3f}s")
arr = np.arange(n)
start = time.perf_counter()
numpy_sum = (arr**2).sum()
print(f"NumPy: {time.perf_counter()-start:.3f}s")Быстрая проверка
Массив какой формы получится при сложении массива формы (3,1) с массивом формы (3,)?
Итоги
Операции NumPy выполняются поэлементно в C (без циклов Python). Broadcasting растягивает совместимые формы без копирования. Используйте axis= для свёртки вдоль определённых измерений. Универсальные функции (np.sin, np.exp и другие) выполняют поэлементные операции со скоростью C.
Часто задаваемые вопросы
Урок «Операции над массивами и broadcasting» бесплатный?
Да — полный текст урока «Операции над массивами и broadcasting» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Операции над массивами и broadcasting»?
Выполняйте векторизованные арифметические операции и изучайте правила broadcasting. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Операции над массивами и broadcasting»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Массивы NumPy и dtypes
- Операции над массивами и broadcasting
- Индексация, срезы и расширенная индексация
- Линейная алгебра с NumPy