Numpy фантазии индексации и назначения

Обычно numpy заставляет совпадать левую и правую части задания, например, если я делаюa[:] = b, b должна быть той же формы или транслироваться в ту же форму, что иa, Но, похоже, есть исключение из этого правила:

>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = a.copy()
>>> a[[0,1,2]] = b[::2]
>>> a
array([0, 2, 4, 3, 4, 5, 6, 7, 8, 9])
>>> a[np.arange(10)] = b[:2]
>>> a
array([0, 1, 0, 1, 0, 1, 0, 1, 0, 1])

Кажется, он работает только с 1d-массивами и только в том случае, если в левой части назначения есть причудливая индексация, но я нигде не смог найти документацию по этому поведению. Задокументировано ли это поведение, если да, то где, а также может ли кто-нибудь привести пример того, когда оно может быть полезным?

Обновить:

Похоже, что тип "numpy flatiter" ведет себя так же, есть ли какая-то связь между flatiter и причудливым индексированием, о которой я не знаю?

>>> a.flat = [10,11]
>>> a
array([10, 11, 10, 11, 10, 11, 10, 11, 10, 11])
>>> a.flat[:] = [2,3,4]
>>> a
array([2, 3, 4, 2, 3, 4, 2, 3, 4, 2])
>>> a.flat = range(100)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Ответы на вопрос(1)

Ваш ответ на вопрос