2012-11-14 12 views
2

如何在不将view更改为copy的情况下将数据存储到numpy视图中?这段代码examplifies我的问题:如何将数据存储到numpy视图中?

>>> import numpy as np 

>>> #-- init arrays and view 
>>> a = np.ones([4]) 
>>> z = np.zeros([2,4]) 
>>> z0 = z[0,:] #-- view 
>>> z0.flags.owndata 
False 

>>> #-- This works! 
>>> #-- modify view in-place 
>>> np.add(a,z0,z0) 
>>> z0.flags.owndata 
False 
>>> z 
array([[ 1., 1., 1., 1.], 
     [ 0., 0., 0., 0.]]) 


>>> #-- reinit arrays and view 
>>> z = np.zeros([2,4]) 
>>> z0 = z[0,:] #-- view 

>>> #-- This does NOT work! 
>>> #-- store data into view 
>>> z0 = a 
>>> z0.flags.owndata 
True 

我知道如何使用+=-=*=/=和就地修改是采取out参数numpy的功能,所以你可以做这样的事情np.abs(x, x)采取x的绝对值-地点。

但是如何在不修改的情况下将数据存储到view

滥用的add功能(加零和存储)的作品,但并不觉得“正确”:

np.add(a,0,z0) 

回答

2

当你这样做z0 = a,然后z0是相同的对象a由蟒蛇逻辑。你想要做的是:

z0[...] = a 

使用切片语法。它使用原地__setitem__ python逻辑。在numpy 1.7。或者稍后您也可以使用np.copyto,这可能会更快一些,但我个人喜欢切片语法。

+0

太棒了!感谢您的解释! – drrossum

相关问题