После 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]). Никакой ошибки типов здесь не возникает: оба варианта валидны, просто делают разные вещи.

Можно заниматься бесплатно

Готовим вопросы…

Три вопроса по теме этой страницы, с объяснениями.

Продолжить в браузере

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