首页 > 解决方案 > numpy 数组操作:为什么 numpy 数组的地址与拼接后其子集的地址不同

问题描述

当我试图创建一个 numpy 数组并且我厌倦了使用拼接.ideals 来操作它时,拼接数组和原始数组应该保持不变,但它不是。为什么?

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

标签: pythonnumpy

解决方案


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 的副本,请创建一个新对象

如下-

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

推荐阅读