我收到错误,例如;
Traceback(最近一次调用最后一次):文件 " C:\ Users \ SONY \ Desktop \ deneme.py",第42行,in Gα[n] = compute_G(x,n)NameError:name' G'未定义
这是我的代码:
N = 20
N_cor = 25
N_cf = 25
a = 0.5
eps = 1.4
def update(x):
for j in range(0,N):
old_x = x[j]
old_Sj = S(j,x)
x[j] = x[j] + random.uniform(-eps,eps)
dS = S(j,x) - old_Sj
if dS>0 and exp(-dS)<random.uniform(0,1):
x[j] = old_x
def S(j,x):
jp = (j+1)%N
jm = (j-1)%N
return a*x[j]**2/2 + x[j]*(x[j]-x[jp]-x[jm])/a
def compute_G(x,n):
g = 0
for j in range(0,N):
g = g + x[j]*x[(j+n)%N]
return g/N
#def MCaverage(x,G):
import random
from math import exp
x=[]
for j in range(0,N):
x.append(0.0)
print"x(%d)=%f"%(j,x[j])
for j in range(0,5*N_cor):
update(x)
for alpha in range(0,N_cf):
for j in range(0,N_cor):
update(x)
for i in range(0,N):
print"x(%d)=%f"%(i,x[i])
for n in range(0,N):
G[alpha][n]=compute_G(x,n)
for n in range(0,N):
avg_G = 0
for alpha in range(0,N_cf):
avg_G = avg_G + G[alpha][n]
avg_G = avg_G / N_cf
print "G(%d) = %f"%(n,avg_G)
当我定义G时,我得到另一个错误,例如:
Traceback(最近一次调用最后一次):文件 &#34; C:\ Users \ SONY \ Desktop \ deneme.py&#34;,第43行,in Gα[n] = compute_G(x,n)IndexError:列表索引超出范围
以下是我如何定义G:
...
for alpha in range(0,N_cf):
for j in range(0,N_cor):
update(x)
for n in range(0,N):
G=[][]
G[alpha][n]=compute_G(x,n)
...
如何定义具有两个索引的数组,即二维矩阵?
答案 0 :(得分:0)
在Python a=[]
中定义一个列表,而不是一个数组。它当然可以用于存储所有相同数字类型的许多元素,并且可以定义从将矩形数组索引到一个列表索引的两个整数的映射。不过,它反而违背了粮食。难以编程和低效存储,因为列表旨在作为任意类型的对象的有序集合。
您最需要的是指向何处开始阅读。这里是。了解Numpy http://www.numpy.org/,它是一个Python模块,用于典型的科学计算,其中包含(大多数)数字数据的数组,其中所有元素都是相同的类型。安装numpy之后,这是一个简短的品尝者。
>>> import numpy as np # importing as np is conventional
>>> p = np.zeros( (6,4) ) # two dimensional, 24 elements in total
>>> for i in range(4): p[i,i]=1
>>> p
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.],
[ 0., 0., 0., 0.],
[ 0., 0., 0., 0.]])
numpy数组是操作尽可能多的数据的有效方法,可以放入计算机的RAM中。
底层numpy是Python的array.array数据类型,但它很少单独使用。 numpy是您通常不想为自己编写的支持代码。尤其是,因为当您的数组是数百万或数十亿个元素时,您无法在像Python这样的解释语言中为其索引提供内部循环的低效率。 Numpy为您提供行,列和数组级操作,其底层代码经过编译和优化,因此运行速度更快。