0 python numpy in-place operator-keyword
数组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?!*
请注意:
虽然我一直在使用解决了这个问题zn = zn + 7,而不是zn += 7我的问题是:为什么在倒数第二行zn += 7改变tn阵列?
定义时g(),使其返回其参数不变.因此,当你说zn = g(tn),你实际上在说zn = tn.因此,zn现在只是另一个名字tn.该+=操作不是十分的精确复制x = x +.它通常做同样的事情,但在后台它调用一个名为的方法__iadd__.由于zn和tn现在相同的对象,您所呼叫tn的__iadd__方法.因此,tn被修改.要改变它,你可以说zn = tn.copy()你第一次定义它; 或者你可以说zn = zn + 7当你试图添加7.
| 归档时间: | 
 | 
| 查看次数: | 146 次 | 
| 最近记录: |