使用多维数组python循环计算变量

时间:2016-02-20 04:00:36

标签: python loops multidimensional-array

我试图从3D数组中计算变量。问题是:我的网格中有纬度和经度,我想测量体积元素中的动能。为此,我需要的音量是我的深度x lat x lon。但是,我的lon和lat是变量的,这意味着我必须从i中减去i + 1以确切知道距离是多少。因此,我尝试了以下内容:

# the total length is var[32,327,899]

for i in range(1,328,1):
    for j in range(1,900,1):
        for k in range(1,33,1):
            j_dis=((lat[i+1,j]-lat[i,j])*1852.)/(1/60.) #distance from i to i+1 in meters
            i_dis=((lon[i,j+1]-lon[i,j])*1852.)/(1/60.) #distance from i to i+1 in meters
            z_dis=(zz[k+1,i,j]-zz[k,i,j])
            # Volume 
            vol[k,i,j]=i_dis*j_dis*z_dis

但是,它不起作用,我不断收到以下错误:

IndexError:索引899超出了轴1的大小为899

我知道它与我的矩阵的大小有关,但我怎么能从i中减去i + 1才能获得该值?

如果有人帮助我,我会很感激。

此致

1 个答案:

答案 0 :(得分:0)

Python数组中的第一个索引是0,所以你需要改变你的range()语句,如下所示:

for i in range(326):
    for j in range(898):
        for k in range(31):
            j_dis=((lat[i+1,j]-lat[i,j])*1852.)/(1/60.) #distance from i to i+1 in meters
            i_dis=((lon[i,j+1]-lon[i,j])*1852.)/(1/60.) #distance from i to i+1 in meters
            z_dis=(zz[k+1,i,j]-zz[k,i,j])
        # Volume 
        vol[k,i,j]=i_dis*j_dis*z_dis

我将范围设置为0,并且由于你要减去两个连续索引,我将上限值降低到(size - 1),这样就不会超出数组边界。您知道,range(n)生成的值从0到n-1。