Bi *_*ico 12 python indexing 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])
Run Code Online (Sandbox Code Playgroud)
它似乎只适用于1d数组,并且只有在赋值的左侧有花哨的索引,但我无法在任何地方找到此行为的文档.是否记录了这种行为,如果有的话,还有人可以举例说明它何时有用?
更新:
看起来numpy flatiter类型的行为也是这样,flatiter和fancy indexing之间是否存在一些我不知道的联系?
>>> 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])
Run Code Online (Sandbox Code Playgroud)