Python 分配给逻辑索引Numpy数组

Python 分配给逻辑索引Numpy数组,python,arrays,numpy,Python,Arrays,Numpy,所以,我知道你可以这样做 >>> arr[mask] = value 但是,如果我想缩短代码(而不是每次都重新计算掩码和索引),我想这样做: >>> sub = arr[mask] >>> sub[...] = value # This works in other cases, but not this one. 我的理解是,使用省略号索引应该允许您指定不是重新分配给定变量,而是广播到实际数组 所以,问题是:为什么它不起作用 我的想法是

所以,我知道你可以这样做

>>> arr[mask] = value
但是,如果我想缩短代码(而不是每次都重新计算掩码和索引),我想这样做:

>>> sub = arr[mask]
>>> sub[...] = value # This works in other cases, but not this one.
我的理解是,使用
省略号
索引应该允许您指定不是重新分配给定变量,而是广播到实际数组

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

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

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

但是可以肯定的是,由于掩码索引版本只是视图(而不是底层结构的副本),这不应该破坏分配。

arr[mask]
是一个副本
arr[mask]=…
看起来相同,但实际上是不同的赋值操作。在其他地方,我已经从调用
\uuu getitem\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
arr[mask]=…
看起来相同,但实际上是不同的赋值操作。在其他地方,我已经从调用
\uuu getitem\uuuuuuuu
\uuuuuuu setitem\uuuuuuu
的角度解释了这一点

但可以肯定的是,由于掩码索引版本只是视图(而不是底层结构的副本),这不应该破坏赋值

这不起作用的原因是使用掩码进行索引:

高级索引始终返回数据的副本(与返回数据的基本切片相反)

但可以肯定的是,由于掩码索引版本只是视图(而不是底层结构的副本),这不应该破坏赋值

这不起作用的原因是使用掩码进行索引:

高级索引始终返回数据的副本(与返回数据的基本切片相反)


也许……因为
sub
是一个值,所以它可以更改为所有内容。因此
sub=arr[mask]
sub
更改为
arr[mask]
(现在,sub是一个字符串)。但是
sub=value
会将
sub
更改为
value
(sub也是一个字符串),它不会将
arr[mask]
更改为
value
?如果不是重复的话似乎非常接近-@KevinGuan如果你正确阅读我的问题,我没有写
sub=arr[mask]
,我写了
sub[…]=arr[mask]
强制修改
sub
@cyphar-Oops,我没有注意。抱歉:PMaybe…因为
sub
是一个值,它可以更改为所有内容。因此
sub=arr[mask]
sub
更改为
arr[mask]
(现在,sub是一个字符串)。但是
sub=value
会将
sub
更改为
value
(sub也是一个字符串),它不会将
arr[mask]
更改为
value
?如果不是重复的话似乎非常接近-@KevinGuan如果你正确阅读我的问题,我没有写
sub=arr[mask]
,我写了
sub[…]=arr[mask]
强制修改
sub
@cyphar-Oops,我没有注意。对不起,P