Что такое массивы NumPy и как считать без циклов?
- Что такое векторизация в NumPy?
- Что такое broadcasting?
ndarray — массив чисел одного типа в непрерывной памяти; операции над ним (a + b, a * 2, np.sqrt(a), a @ b) выполняются в C над всем массивом сразу — в десятки раз быстрее цикла Python. Broadcasting — правило, по которому массивы разной формы приводятся друг к другу: вычесть из матрицы вектор средних по столбцам можно одной операцией. Агрегаты считают по осям: a.sum(axis=0) — по столбцам.
- shape — форма массива, dtype — тип элементов
- Маски: a[a > 0] выбирает элементы по условию
- @ — матричное умножение, * — поэлементное
А ещё Срез массива — представление (view): изменение среза меняет исходный массив
Подробно
Пример: косинусное сходство запроса со всеми документами.
import numpy as np
docs = np.random.rand(1000, 384) # 1000 векторов
q = np.random.rand(384)
docs_n = docs / np.linalg.norm(docs, axis=1, keepdims=True)
q_n = q / np.linalg.norm(q)
scores = docs_n @ q_n # 1000 сходств без цикла
top5 = np.argsort(-scores)[:5]
Broadcasting: матрица (1000, 384) делится на столбец норм (1000, 1) — NumPy растягивает столбец на все 384 колонки.
Ловушки: путать * и @, забыть keepdims и получить неверную форму, менять срез, думая, что это копия.
Что хотят услышать
- ndarray, shape, dtype.
- Векторные операции вместо циклов.
- Broadcasting и агрегаты по осям.
- View против копии.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Массив NumPy хранит элементы любых типов одинаково эффективно, а срез создаёт независимую копию данных
- ✗Оператор * в NumPy — матричное умножение
- ✗Цикл for по массиву NumPy так же быстр, как векторные операции
- ✓Операции идут в C над всем массивом сразу; broadcasting приводит массивы разной формы друг к другу
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.