Python就地运算符(如“x2B=”)、numpy数组和标识函数工作不正常?
数组Python就地运算符(如“x2B=”)、numpy数组和标识函数工作不正常?,python,numpy,operator-keyword,in-place,Python,Numpy,Operator Keyword,In Place,数组yn和zn在数值上是相等的,但有一个奇怪的区别: 正如预期的那样,行yn+=7不会更改tn数组,但最后第二行zn+=7更改tn数组 代码如下: import numpy as np def f(x): return (1*x) def g(x): return (x) nn = 5 tn = np.zeros(nn) yn = np.zeros(nn) zn = np.zeros(nn) tn = np.linspace(0,1,nn) yn = f(tn) zn = g(tn) pri
yn
和zn
在数值上是相等的,但有一个奇怪的区别:
正如预期的那样,行yn+=7
不会更改tn
数组,但最后第二行zn+=7
更改tn
数组
代码如下:
import numpy as np
def f(x): return (1*x)
def g(x): return (x)
nn = 5
tn = np.zeros(nn)
yn = np.zeros(nn)
zn = np.zeros(nn)
tn = np.linspace(0,1,nn)
yn = f(tn)
zn = g(tn)
print('tn at step1 =',tn)
yn += 7 #as expected, this line does not change tn.
print('tn at step2 =',tn)
zn += 7 #why this line adds 7 to tn array?!
print('tn at step3 =',tn)
输出为:
tn at step1 = [ 0. 0.25 0.5 0.75 1. ]
tn at step2 = [ 0. 0.25 0.5 0.75 1. ]
tn at step3 = [ 7. 7.25 7.5 7.75 8. ] *why is 7 added to tn array?!*
请注意,所涉及的问题包括:
- numpy阵列
- g(x)as恒等式函数
- 就地iadd运算符(+=)
虽然我用
zn=zn+7
而不是zn+=7
解决了这个问题,但我的问题是:为什么在最后一行zn+=7
changestn
array?定义g()
时,它返回的参数不变。因此,当你说zn=g(tn)
时,你实际上是在说zn=tn
。因此,zn
现在只是tn
的另一个名称。+=
运算符与x=x+
不完全相同。它通常做同样的事情,但是在后台它调用了一个名为\uuuidd\uuuu
的方法。由于zn
和tn
现在是同一个对象,因此您正在调用tn
的\uu iadd\uu
方法。因此,tn
被修改。要改变这一点,您可以在第一次定义它时说zn=tn.copy()
;或者,当您尝试添加7时,您可以说zn=zn+7
。几个编码点。tn
etc的初始zero
定义会被后面的赋值覆盖。你不需要它们。在g
中,()
没有添加任何内容。使用返回x
,或按照回答返回x.copy()
中的建议。