如何将数据存储到numpy视图中?

时间:2012-11-14 17:00:53

标签: python numpy

如何将数据存储到numpy视图而不将view更改为copy?此代码段举例说明了我的问题:

>>> 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)

1 个答案:

答案 0 :(得分:2)

执行z0 = a时,z0与python逻辑的a对象相同。你想要做的是:

z0[...] = a

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