当我试图创建一个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的变化?
- 因为c和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]])````