Вы считаете метрику по большому массиву чисел и выбираете NumPy вместо Python list. Почему операции вроде arr * 1.1 на ndarray обычно быстрее, чем цикл for по list?
A
ndarray хранит данные однородно и выполняет операции в оптимизированном C-коде, минимизируя Python-циклы.B
list хранит числа компактным блоком в одной области памяти, а ndarray использует pointer-ссылки и за счёт этого быстрее.C
ndarray по умолчанию выполняет вычисления на GPU без явных настроек и установки CUDA-библиотек.D
ndarray хранит в массиве разные типы (int, float, str) и переключается между ними быстрее, чем list.Правильный ответ. Ускорение
ndarray идёт за счёт однородного типа, непрерывной памяти и векторизованного C-кода, который минимизирует накладные расходы Python.Разбор
Массив NumPy фиксирует один dtype, лежит в непрерывной области памяти и обрабатывается компилированными C-функциями (BLAS/SIMD). Поэтому arr * 1.1 запускает один внутренний цикл на C, а не цикл по объектам Python. У обычного list всё наоборот: он хранит ссылки на разнотипные объекты, и каждое умножение требует диспетчеризации Python. NumPy не запускает GPU автоматически — для этого нужны отдельные библиотеки (например, CuPy/JAX). Хранение «разных типов в одном массиве» — это про dtype=object, и оно как раз медленнее обычного NumPy.
Проверь себя · 1/3разбор после ответа
Какое значение вернёт
arr.shape, если arr = np.array([[1, 2, 3], [4, 5, 6]])?Ещё вопросы по теме «NumPy: основы»
- После `import numpy as np` вы сравниваете операции над списком Python `list` и массивом `np.ndarray`. Что верно для `lst * 2` и `arr * 2`, где `lst = [1, 2, 3]`, а `arr = np.array([1, 2, 3])`?
- Какое значение вернёт `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)`?
- Что вернёт `arr.shape`, если `arr = np.arange(6).reshape(2, 3)`?
- Все вопросы по «NumPy: основы» →