当前位置: 代码迷 >> python >> 具有两个索引的数组的定义误差
  详细解决方案

具有两个索引的数组的定义误差

热度:112   发布时间:2023-06-13 15:28:26.0

我收到一个错误,例如;

追溯(最近一次通话):文件“ C:\\ Users \\ SONY \\ Desktop \\ deneme.py”,第42行,位于Gα[n] = compute_G(x,n)NameError:名称'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)

当我定义GI时出现另一个错误,例如:

追溯(最近一次通话最近):文件“ C:\\ Users \\ SONY \\ Desktop \\ deneme.py”,第43行,在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)
...

我该怎么做才能定义一个具有两个索引的数组,即一个二维矩阵?

在Python中, a=[]定义列表,而不是数组。 它当然可以用于存储许多具有相同数字类型的元素,并且可以定义从两个整数(一个矩形数组索引到一个列表索引)的映射。 不过,这很不利。 难以编程且存储效率低下,因为列表旨在作为对象的有序集合,可以是任意类型。

您可能最需要的是从何处开始阅读的指南。 这里是。 了解Numpy ,这是一个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为您提供行级,列级和数组级的操作,其底层代码已编译和优化,因此运行速度大大提高。

  相关解决方案