2012-11-14 44 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

相關問題