Выбор ответа Senior NumPy: массивы и векторизация обновлено

Когда reshape копирует

Вопрос

Когда a.reshape(...) вернёт копию, а не представление?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Когда новую форму не выразить strides по памяти, например после .T. reshape старается вернуть view: если данные лежат так, что новую форму можно описать другими strides, память не копируется.

Варианты ответа

  1. Когда новую форму не выразить strides по памяти, например после .Tправильный ответ
  2. Всегда возвращает копию, а view даёт только явный вызов a.view()
  3. Когда число элементов в новой форме меняется
  4. Только для массивов, у которых больше двух измерений (3D и выше)

Разбор

reshape старается вернуть view: если данные лежат так, что новую форму можно описать другими strides, память не копируется. После a.T массив не непрерывен по строкам, и сплющить его в C-порядке без копии нельзя, тогда reshape молча копирует. Число элементов менять нельзя совсем, это ValueError. Размерность сама по себе роли не играет. Проверить можно через np.shares_memory(a, b).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.