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\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuarr[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