Выбор ответа Senior NumPy: массивы и векторизация обновлено
Когда reshape копирует
Вопрос
Когда a.reshape(...) вернёт копию, а не представление?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Когда новую форму не выразить strides по памяти, например после .T. reshape старается вернуть view: если данные лежат так, что новую форму можно описать другими strides, память не копируется.
Варианты ответа
- Когда новую форму не выразить strides по памяти, например после
.Tправильный ответ - Всегда возвращает копию, а view даёт только явный вызов
a.view() - Когда число элементов в новой форме меняется
- Только для массивов, у которых больше двух измерений (3D и выше)
Разбор
reshape старается вернуть view: если данные лежат так, что новую форму можно описать другими strides, память не копируется. После a.T массив не непрерывен по строкам, и сплющить его в C-порядке без копии нельзя, тогда reshape молча копирует. Число элементов менять нельзя совсем, это ValueError. Размерность сама по себе роли не играет. Проверить можно через np.shares_memory(a, b).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «NumPy: массивы и векторизация»
- Что значит axis=0
- Broadcasting: форма результата
- Обрезка выбросов по перцентилям
- Скользящее среднее через cumsum
- Попарные расстояния через broadcasting
- Стандартизация столбцов матрицы (z-score)
- Запись float в целочисленный массив
- Fancy indexing возвращает копию