0
的陣列yn
和zn
是等於numericaly講,但有一個奇怪的區別: 行yn += 7
,如預期,不改變tn
陣列,但倒數第二行zn += 7
改變tn
陣!Python就地操作符(如「+ =」),numpy數組和標識函數無法正常工作?
這是代碼:
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'等的初始'零'定義被後面的賦值覆蓋。你不需要它們。在'g'中,'()'不添加任何內容。使用'return x',或按照答案'return x.copy()'中的建議。 – hpaulj