После import numpy as np вы сравниваете операции над списком Python list и массивом np.ndarray. Что верно для lst * 2 и arr * 2, где lst = [1, 2, 3], а arr = np.array([1, 2, 3])?

AОбе операции вызовут ошибку типов и потребуют явного приведения коллекции к числу.
BОбе операции повторят значения два раза, как обычная склейка списка с самим собой.
Clst * 2 повторит элементы списка два раза, а arr * 2 умножит каждый элемент массива на 2 поэлементно.
DОбе операции умножат элементы поэлементно, как стандартное арифметическое умножение для коллекций.
Правильный ответ. Для list оператор * означает повторение, а для np.ndarray — поэлементное арифметическое умножение через векторизацию.

Разбор

Оператор * в Python перегружается типами, а не имеет универсального арифметического смысла. У списка lst * 2 — это конкатенация со своей копией, поэтому [1, 2] * 2 даёт [1, 2, 1, 2]. У np.ndarray — поэлементное умножение, поэтому arr * 2 для np.array([1, 2]) даёт np.array([2, 4]). Никакой ошибки типов здесь не возникает: оба варианта валидны, просто делают разные вещи.

Проверь себя · 1/3разбор после ответа
Пусть m = np.array([[1, 2, 3], [4, 5, 6]]). Чему равен np.mean(m, axis=1)?
Тренировать Python в Telegram

Ещё вопросы по теме «NumPy: основы»