很抱歉在python numpy中出现一个非常简单的问题当我试图让a等于b(如下代码(
import numpy as np
a=np.array((1,2))
b=np.array((3,4))
b=a
a=np.array((5,6))
我得到的是:
a=array([5,6])
b=array([1,2])
我想这没什么奇怪的。然而,当我试图编辑数组中的一个值时(如下所示(:
import numpy as np
a=np.array((1,2))
b=np.array((3,4))
b=a
a[0]=100
我得到:
a=array([100,2])
b=array([100,2])
所以我只是想知道为什么b也在变化?如果我想得到一个结果,我该怎么办:
a=array([100,2])
b=array([1,2])
很抱歉,我对python的基础知识不好,但这个问题真的让我很困惑,我希望有人愿意帮助我解释这一点。提前谢谢。
这真的很简单。让我逐行解释一下:
a=np.array((1,2))
这为对象np.array((1,2))
设置了一个pointer
,该对象可以通过调用a
来访问。b=np.array((3,4))
也会发生同样的情况
调用b=a
会更改b的指针。它现在指向与a
相同的对象。所以现在b
等于np.array((1,2))
。下一个电话:
a=np.array((5,6))
这会将a
的指针更改为指向对象np.array((5,6))
。因此CCD_ 11和CCD_ 12不再指向同一事物。
a[0]=100
更改a
和b
中的值,因为在这里您更改的是它们都不指向的对象,而不是更改指针本身。
如果您希望避免这种情况,可以创建a
的copy
。例如:
b = np.copy(a)
当您执行=
时,您不是在创建新的数组,而是将引用b
设置为指向a
所指向的同一数组。
下面将通过复制实际创建一个新阵列:
b=numpy.copy(a)
类似地,如果你想为列表做这件事
b = a[:]