0Pricing
Python Academy · Урок

Операции над массивами и 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 — локальная установка не требуется.

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

  1. Массивы NumPy и dtypes
  2. Операции над массивами и broadcasting
  3. Индексация, срезы и расширенная индексация
  4. Линейная алгебра с NumPy
← Назад к Python Academy