2

如何在不将数据更改为 numpy 视图的情况下将数据存储到 numpy 视图viewcopy?此代码片段举例说明了我的问题:

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

+= -= *= /=我知道使用带有参数的 numpy 函数进行就地修改out,因此您可以执行诸如获取就地np.abs(x, x)绝对值之类的操作。x

但是如何只将数据存储到一个view而不做修改呢?

滥用该add功能(添加零和存储)有效,但感觉不“正确”:

np.add(a,0,z0)
4

1 回答 1

2

当你这样做时z0 = a, then是与python 逻辑z0相同的对象。a你想要做的是:

z0[...] = a

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

于 2012-11-14T17:30:11.077 回答