我可以从numpy数组的布尔选择创建视图吗?

我可以从numpy数组的布尔选择创建视图吗?,numpy,Numpy,如果我创建一个numpy数组,并创建另一个作为其中的选择性索引: >>> x array([[ 2, 3, 4], [ 5, 6, 7], [ 6, 7, 8], [11, 12, 13]]) >>> nz array([ True, True, False, True], dtype=bool) 然后直接使用nz返回原始数组的视图: >>> x[nz,:] array([[ 2,

如果我创建一个numpy数组,并创建另一个作为其中的选择性索引:

>>> x
array([[ 2,  3,  4],
       [ 5,  6,  7],
       [ 6,  7,  8],
       [11, 12, 13]])

>>> nz
array([ True,  True, False,  True], dtype=bool)
然后直接使用nz返回原始数组的视图:

>>> x[nz,:]
array([[ 2,  3,  4],
       [ 5,  6,  7],
       [11, 12, 13]])

>>> x[nz,:] += 2
>>> x
array([[ 4,  5,  6],
       [ 7,  8,  9],
       [ 6,  7,  8],
       [13, 14, 15]])
但是,任务自然会复制:

>>> v = x[nz,:]
对v的任何操作都在副本上,对原始数组没有影响

有没有办法从x[nz,:]创建一个命名视图,简单地缩写代码,或者我可以传递它,这样命名视图上的操作将只影响x的选定元素?

Numpy已经屏蔽了_数组,这可能是您正在寻找的:

将numpy作为np导入 x=np.asarray[[2,3,4],[5,6,7],[6,7,8],[11,12,13]] nz=np.asarray[True,True,False,True],dtype=bool mx=np.ma.masked_arrayx,~nz.repeat3 True表示已屏蔽,因此需要~ mx+=2 x也发生了变化,因为它是mx的基础 printx printx是mx.base
最后一个赋值使用x.。\uuuu getitem\uuuu idx\u元组。x[nz,:]=值使用x.uu setitem_uuidx_元组,值。因此,虽然两者都使用[nz,:],但底层索引操作是不同的。查看和复制之间的区别仅适用于get操作。您可以传递一个idx\u tuple=nz,但仍然必须使用x[idx\u tuple]=。。。谢谢。我本以为这是一个合适的答案。。但我是新来的。这正是我一直在寻找的。有一些…但我的操作几乎和OP一样简单,不是嵌套的,形状改变的,或任何东西。。。我会先测试一下再接受。可能还有进一步评论的余地