Простая индексация и присваивание

Обычно 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])

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

Обновление:

Похоже, что тип 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])
12
задан Bi Rico 29 February 2012 в 20:14
поделиться