我正在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)'一样改变 –