我正在用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)
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:1)
您需要在函数内返回副本并调用函数
def branch(replicas):
# code here
return new_replicas
然后别的地方叫它
print branch(replicas)
函数可以执行任何您想要的操作,但要实际执行代码,您必须通过键入其名称来调用该函数(在您的情况下为branch
并在之后添加括号以调用该函数。)你的函数接受一个参数,你必须通过函数调用中的任何内容来传递branch(replicas)
如果要在执行该函数后使用这些副本,则为其分配变量
new_replicas = branch(replicas)
答案 1 :(得分:0)
您需要实际调用该函数才能运行它:
branch(something)
答案 2 :(得分:0)
该函数必须返回或打印某些内容或为全局变量赋值。否则,没有必要使用它。其次,你必须在函数本身之外的地方调用它。
myNewProject