2016-06-10 54 views
1

比方说,我有一个数组x和数组mask的蒙版。我想用np.copyto使用mask来写入x。有什么办法可以做到这一点?只是试图使用copyto不起作用,我想,因为蒙面x是不可写的。写入numpy中的蒙面数组

x = np.array([1,2,3,4]) 
mask = np.array([False,False,True,True]) 

np.copyto(x[mask],[30,40]) 

x 
# array([1, 2, 3, 4]) 
# Should be array([1, 2, 30, 40]) 
+1

会不会'X [面具] = [30,40]'工作? – SvbZ3r0

回答

2

正如评论使用x[mask]当指数分配工作

In [16]: x[mask]=[30,40] 

In [17]: x 
Out[17]: array([ 1, 2, 30, 40]) 

你必须要小心。这是'高级索引',所以它会创建一个副本,而不是x的视图。直接分配这不是问题,但copyto x[mask]作为参数传递给函数。

In [19]: y=x[mask] 
In [21]: np.copyto(y,[2,3]) 

改变y,但不x

检查它的文档我看到copyto不接受where参数,它可以作为

In [24]: np.copyto(x,[0,0,31,41],where=mask) 

In [25]: x 
Out[25]: array([ 1, 2, 31, 41])