我可能在这个问题上使用了错误的术语,因此可能会复制这个问题,但我无法找到它。
在下面的示例中,如果可能,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. ])
答案 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