【发布时间】:2016-02-20 19:56:29
【问题描述】:
数组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) 作为恒等函数
- 就地 iadd 运算符 (+=)
虽然我已经使用zn = zn + 7 而不是zn += 7 解决了这个问题,但我的问题是:为什么在倒数第二行zn += 7 更改tn 数组?
【问题讨论】:
-
几个编码点。
tn等的初始zeros定义被以后的赋值覆盖。你不需要它们。在g中,()不添加任何内容。使用return x,或在答案return x.copy()中推荐。
标签: python numpy operator-keyword in-place