我可以从numpy数组的布尔选择创建视图吗?
如果我创建一个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,
>>> 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一样简单,不是嵌套的,形状改变的,或任何东西。。。我会先测试一下再接受。可能还有进一步评论的余地