一块numpy数组可以是另一个数组的视图吗?

时间:2017-04-18 14:55:41

标签: python arrays numpy

我可能在这个问题上使用了错误的术语,因此可能会复制这个问题,但我无法找到它。

在下面的示例中,如果可能,In [16]中的指令是什么,如果b被修改,a[3:6]的切片也会受到影响?

In [12]: import numpy as np

In [13]: a = np.zeros((7))

In [14]: b = np.random.rand(3,)

In [15]: b
Out[15]: array([ 0.76954692,  0.74704679,  0.05969099])

In [16]: a[3:6] = b

In [17]: b[0] = 2.2

In [18]: a # a has not changed
Out[18]:
array([ 0.        ,  0.        ,  0.        ,  0.76954692,  0.74704679,
        0.05969099,  0.        ])

2 个答案:

答案 0 :(得分:2)

在作业a[3:6] = b之后,添加第b = a[3:6]行。然后b成为数组a中的视图,因此b的修改会相应地修改a。 (反过来说)。

数字NumPy数组包含数字(相同dtype),不包含引用或任何其他类型的结构。 整个数组可能是另一个数组的视图(在这种情况下,它使用的是数据而不是自己的数据),但其中一部分不能。对切​​片的分配始终复制数据。

答案 1 :(得分:1)

另一种写这个的方法:

a = np.zeros((7))
b = a[3:6]  # b is now a view to a

b[:] = np.random.rand(3)  # changes both b and a
                          # the [:] is so we don't create a new variable