После import numpy as np вы сравниваете операции над списком Python list и массивом np.ndarray. Что верно для lst * 2 и arr * 2, где lst = [1, 2, 3], а arr = np.array([1, 2, 3])?
AОбе операции вызовут ошибку типов и потребуют явного приведения коллекции к числу.
BОбе операции повторят значения два раза, как обычная склейка списка с самим собой.
C
lst * 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)?Ещё вопросы по теме «NumPy: основы»
- Какое значение вернёт `arr.shape`, если `arr = np.array([[1, 2, 3], [4, 5, 6]])`?
- Что будет результатом выражения `arr + 10`, если `arr = np.array([1, 2, 3])`?
- Пусть `x = np.array([[1, 2], [3, 4]])`. Чему равен результат `np.sum(x, axis=0)`?
- Вы считаете метрику по большому массиву чисел и выбираете NumPy вместо Python `list`. Почему операции вроде `arr * 1.1` на `ndarray` обычно быстрее, чем цикл `for` по `list`?
- Что вернёт `arr.shape`, если `arr = np.arange(6).reshape(2, 3)`?
- Все вопросы по «NumPy: основы» →