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

Fancy indexing возвращает копию

Вопрос

Изменится ли a после b = a[[0, 2]]; b[0] = 100?

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

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

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

Коротко

Правильный ответ: Нет: индексация списком индексов создаёт копию. Индексирование массивом или списком индексов (fancy indexing) и булевой маской всегда создаёт копию, в отличие от базовых срезов.

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

  1. Да: a[0] станет 100, потому что b это view
  2. Да, но только если массив a одномерный
  3. Нет: индексация списком индексов создаёт копиюправильный ответ
  4. Нет, потому что b[0] = 100 вызовет ошибку

Разбор

Индексирование массивом или списком индексов (fancy indexing) и булевой маской всегда создаёт копию, в отличие от базовых срезов. Поэтому a не меняется при любой размерности. Ошибки нет: копию можно менять. А вот a[[0, 2]] = 100 (присваивание прямо в индексацию) изменит a, это отдельная операция __setitem__.

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

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