分配给逻辑索引的Numpy数组

时间:2015-10-03 10:38:20

标签: python arrays numpy

所以,我知道你可以通过

来做到这一点
>>> arr[mask] = value

但是,如果我想让代码更短(而不是每次都重新计算掩码和索引),我想做这样的事情:

>>> sub = arr[mask]
>>> sub[...] = value # This works in other cases, but not this one.

我的理解是,执行Ellipses索引应该允许您指定您不重新分配给定变量,而是广播到实际数组。

所以,问题是:它为什么不起作用?

我的想法是,这与以下事实有关:

>>> arr[mask] is arr[mask]
False

但是当然,因为掩码索引版本只是视图(不是底层结构的副本),所以不应该破坏赋值。

2 个答案:

答案 0 :(得分:2)

arr[mask]是副本。 arr[mask]=...看起来是一样的,但实际上是一个不同的赋值操作。在其他地方,我已经通过拨打__getitem____setitem__来解释这一点。

答案 1 :(得分:2)

  

但是当然,因为掩码索引版本只是视图(不是底层结构的副本),所以不应该破坏赋值。

这不起作用的原因是使用掩码will create a copy, not a view建立索引:

  

高级索引始终返回数据的副本(与返回view的基本切片形成对比)。