很抱歉在python numpy中有一个非常简单的问题 当我尝试让a等于b时(如下代码)
SELECT MAX(ROWTIME),TIMESTAMPTOSTRING(ROWTIME, 'yyyy-MM-dd HH:mm:ss'),SERIAL,COUNT FROM MY_STREAM WHERE TIMESTAMPTOSTRING(ROWTIME, 'yyyy-MM-dd HH:mm:ss') >= DATE AND TIMESTAMPTOSTRING(ROWTIME, 'yyyy-MM-dd HH:mm:ss') <= DATE2 GROUP BY SERIAL,COUNT LIMIT 20;
我得到的是:
import numpy as np
a=np.array((1,2))
b=np.array((3,4))
b=a
a=np.array((5,6))
我认为这并不奇怪。 但是,当我尝试编辑a数组(如下所示)中的值之一时:
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
所以我只是想知道为什么b也要改变? 以及如果我想获得结果该怎么办:
a=array([100,2])
b=array([100,2])
对不起,我对python的基本了解并不好,但是这个问题确实使我感到困惑,我希望有人愿意帮助我解释这一点。 预先感谢。
答案 0 :(得分:0)
当您执行=
时,您并没有创建新的数组,而只是将引用b
设置为指向a
所指向的同一数组。 / p>
下面将通过复制实际创建一个新数组:
b=numpy.copy(a)
类似地,如果您想为列表做
b = a[:]
答案 1 :(得分:0)
真的很简单。让我逐行解释一下:
a=np.array((1,2))
这为对象pointer
设置了np.array((1,2))
,可以通过调用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))
。因此a
和b
不再指向同一事物。
a[0]=100
会同时更改a
和b
中的值,因为在这里更改的是它们都指向的对象,而不是指向指针本身。
如果您希望避免这种情况,可以创建copy
中的a
。例如:
b = np.copy(a)