我试图从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才能获得该值?
如果有人帮助我,我会很感激。
此致
答案 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。