numpy数组操作:为什么拼接后numpy数组的地址与其子集的地址不相同



当我试图创建一个numpy数组时,我厌倦了使用拼接来操作它。理想的拼接数组和原始数组应该保持不变,但事实并非如此。为什么?

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

我拿了这个阵列我现在将拼接并更新其值

c = a[:2,1:3]
c[0,0] = 99 

现在,a的值也会在其相应的位置进行更新在python中,只有当地址是相同的时才会发生这种情况

当我检查每个的id时,它显示不同的

print(id(c),id(a))

输出:

139866833241552 139866835761152
array([[ 1,  2,  3,  4,  5],
[ 6,  7,  9, 10, 11]])
>>> c=a[:2,1:3]
>>> c
array([[2, 3],
[7, 9]])
>>> c[0,0]
2
>>> c[0,0]=99
>>> c
array([[99,  3],
[ 7,  9]])
>>> a
array([[ 1, 99,  3,  4,  5],
[ 6,  7,  9, 10, 11]])

你的问题是,为什么a反映了c的变化?

  1. 因为c和a指向同一个对象
  2. 要复制,请创建一个新对象

如下-

>>> a
array([[ 1, 99,  3,  4,  5],
[ 6,  7,  9, 10, 11]])
>>> c=np.array(a)
>>> c
array([[ 1, 99,  3,  4,  5],
[ 6,  7,  9, 10, 11]])
>>> c[0,0]=100
>>> c
array([[100,  99,   3,   4,   5],
[  6,   7,   9,  10,  11]])
>>> a
array([[ 1, 99,  3,  4,  5],
[ 6,  7,  9, 10, 11]])````

最新更新