所以,我知道你可以通过
来做到这一点>>> arr[mask] = value
但是,如果我想让代码更短(而不是每次都重新计算掩码和索引),我想做这样的事情:
>>> sub = arr[mask]
>>> sub[...] = value # This works in other cases, but not this one.
我的理解是,执行Ellipses
索引应该允许您指定您不重新分配给定变量,而是广播到实际数组。
所以,问题是:它为什么不起作用?
我的想法是,这与以下事实有关:
>>> arr[mask] is arr[mask]
False
但是当然,因为掩码索引版本只是视图(不是底层结构的副本),所以不应该破坏赋值。
答案 0 :(得分:2)
arr[mask]
是副本。 arr[mask]=...
看起来是一样的,但实际上是一个不同的赋值操作。在其他地方,我已经通过拨打__getitem__
和__setitem__
来解释这一点。
答案 1 :(得分:2)
但是当然,因为掩码索引版本只是视图(不是底层结构的副本),所以不应该破坏赋值。
这不起作用的原因是使用掩码will create a copy, not a view建立索引:
高级索引始终返回数据的副本(与返回view的基本切片形成对比)。