【问题标题】:Defining Error of An Array with Two Index定义具有两个索引的数组的错误
【发布时间】:2016-01-20 15:53:03
【问题描述】:

我收到一个错误,例如;

Traceback(最近一次调用最后一次):文件 “C:\Users\SONY\Desktop\deneme.py”,第 42 行,在 G[alpha][n]=compute_G(x,n) NameError: name 'G' is not defined

这是我的代码:

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(最近一次调用最后一次):文件 “C:\Users\SONY\Desktop\deneme.py”,第 43 行,在 G[alpha][n]=compute_G(x,n) IndexError: list index out of range

这是我如何定义 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 arrays matrix indexing


    【解决方案1】:

    在 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 为您提供行、列和数组级操作,其底层代码经过编译和优化,因此运行速度相当快。

    【讨论】:

    • 我已尝试导入 numpy.但是我收到一个错误,例如 Traceback(最近一次调用最后一次):文件“C:\Users\SONY\Desktop\deneme.py”,第 30 行,在 中 import numpy as np ImportError: No module named numpy > >>
    • 对不起,我不熟悉 Windows 上的 Python。在 Linux 上,您需要使用系统的安装程序或 pip 将 numpy 添加到 vanilla Python 安装。也许谷歌“在 Windows 上安装 numpy”,如果你失败了,在这里问?
    猜你喜欢
    • 1970-01-01
    • 2013-05-13
    • 2015-12-05
    • 1970-01-01
    • 2014-02-09
    • 2015-11-24
    • 2012-03-20
    • 2022-01-18
    • 2015-12-26
    相关资源
    最近更新 更多