Numpy花哨索引和分配

时间:2012-02-24 01:11:23

标签: python indexing numpy

通常numpy强制分配的左侧和右侧匹配,例如,如果我a[:] = bb必须是相同的形状或广播到与{{1}相同的形状}。但该规则似乎有例外:

a

它似乎只适用于1d数组,并且只有在分配的左侧有花哨的索引,但我还没有能够在任何地方找到此行为的文档。是否记录了这种行为,如果有的话,还有人可以举例说明它何时有用?

更新

看起来numpy flatiter类型的行为也是这样,flatiter和fancy indexing之间是否存在一些我不知道的关联?

>>> 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 个答案:

答案 0 :(得分:1)

我认为这种行为是以R及其祖先S / S-plus为蓝本的。这就是列表赋值(“向量”赋值)在那里的工作方式,它被称为“回收”。 R项目网站谈到了它,但我在this link找到了更有启发性的解释。在R中,矢量是测量的集合,因此以它的方式填充或修剪它是有意义的。这种逻辑有多少让它变得笨拙,为什么,这仍然是一个很好的问题。