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

Python 定义具有两个索引的数组的错误,python,arrays,matrix,indexing,Python,Arrays,Matrix,Indexing,我得到一个错误,例如 回溯(最近一次调用上次):文件 “C:\Users\SONY\Desktop\deneme.py”,第42行,在 G[alpha][n]=compute_G(x,n)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)

我得到一个错误,例如

回溯(最近一次调用上次):文件 “C:\Users\SONY\Desktop\deneme.py”,第42行,在 G[alpha][n]=compute_G(x,n)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)

我应该如何定义一个具有两个索引的数组,即二维矩阵?

在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为您提供了行、列和数组级别的操作,这些操作的底层代码经过编译和优化,因此运行速度要快得多。

我已经尝试导入Numpy。但是我得到了一个错误,例如,回溯(最近一次调用最后一次):文件“C:\Users\SONY\Desktop\deneme.py”,第30行,在import numpy as np ImportError:没有名为numpy的模块>>>对不起,我不熟悉Windows上的Python。在Linux上,您需要使用系统的安装程序或pip将numpy添加到普通Python安装中。可能是谷歌“在windows上安装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.]])