我正在Python中編寫蒙特卡羅模擬,我有一些代碼應該複製矩陣中的某些行。當我最初寫它看起來像這樣的代碼:代碼一旦變成函數就停止工作(Python)
newReplicas = []
for j in range(len(replicas)):
replica = replicas[j]
r2 = 0
for x in replica:
r2 += x * x
V = 0.5 * mass * w**2 * r2
W = exp(-(V - ER)/rootT)
mn = int(W + random.uniform(0,1))
if mn >= 3:
newReplicas.append(replica)
newReplicas.append(replica)
newReplicas.append(replica)
elif mn == 2:
newReplicas.append(replica)
newReplicas.append(replica)
elif mn == 1:
newReplicas.append(replica)
replicas = newReplicas
這工作絕對沒問題,但是當我在此函數,它停止工作完全沒有行永遠得到複製。這是後我試圖將其轉換爲一個函數的代碼:
def branch(replicas):
newReplicas = []
for j in range(len(replicas)):
replica = replicas[j]
r2 = 0
for x in replica:
r2 += x * x
V = 0.5 * mass * w**2 * r2
W = exp(-(V - ER)/rootT)
mn = int(W + random.uniform(0,1))
if mn >= 3:
newReplicas.append(replica)
newReplicas.append(replica)
newReplicas.append(replica)
elif mn == 2:
newReplicas.append(replica)
newReplicas.append(replica)
elif mn == 1:
newReplicas.append(replica)
replicas = newReplicas
branch(replicas)
print(replicas)
,我一直在使用的值如下:
mass = 1
w = 1
ER = 0.5
rootT = sqrt(0.02)
爲什麼會出現這種情況,我該如何解決?
你是什麼意思,它停止工作?你期望它做什麼?這是什麼做錯了? –
'replicas = newReplicas'此行刪除對原始列表的引用,並將'replicas'設置爲指向您的'newReplicas'變量。相反,在函數的末尾有一個'return newReplicas',並在你的代碼中有一行像'replicas = branc(replicas)'一樣改變 –