Python:迭代不同大小的数组

Python:迭代不同大小的数组,python,arrays,numpy,indexing,vectorization,Python,Arrays,Numpy,Indexing,Vectorization,在我的工作中,我试图编写一个函数,从两个输入计算网格垂直水平上的压力: 1) axArray.DataArray包含至少2个与表面压力场相对应的维度(但通常还包含一次和一个系综成员维度,可能更多) 2) 与垂直标高数量相对应的整数 它应该返回一个数组,该数组类似于输入数组的副本,具有额外的垂直维度 相关部分如下: pressure = np.empty(sfc_p.shape + (vert_res,), dtype=float) # loop for lev in range(vert_r

在我的工作中,我试图编写一个函数,从两个输入计算网格垂直水平上的压力:

1) a
xArray.DataArray
包含至少2个与表面压力场相对应的维度(但通常还包含一次和一个系综成员维度,可能更多)
2) 与垂直标高数量相对应的整数

它应该返回一个数组,该数组类似于输入数组的副本,具有额外的垂直维度

相关部分如下:

pressure = np.empty(sfc_p.shape + (vert_res,), dtype=float)

# loop 
for lev in range(vert_res):
    pressure[..., lev] = float(a_n[lev]) + float(b_n[lev]) * sfc_p.values[sfc_p.shape[:]]

return pressure
sfc\u p
是输入数组,
vert\u res
是整数,
a\u n
b\u n
是一些系数

sfc\u p
压力
的形状为:

(1, 51, 66, 131)  
(1, 51, 66, 131, 137)  
分别作为例子

无论如何,这会产生一个错误:
“索引器错误:索引1超出大小为1的轴0的界限”

这显然是指第一维度,但我根本看不出哪里出了问题,也看不出在这种情况下如何正确索引。我没有发现任何类似的问题。有人能帮我吗?
如果有什么不清楚的地方,我很乐意提供进一步的信息。

只需替换
sfc\u p.shape[:]
行中有

压力[…,lev]=浮子(a_n[lev])+浮子(b_n[lev])*sfc_p.值[sfc_p.形状[:]


解决了我的问题。谢谢大家帮我澄清我的问题

我无法从您的信息中判断是哪个索引操作导致了问题。我建议在单独的一行上使用每个索引表达式运行循环,例如,
a_n[lev]
b_n[lev]
etc什么是
sfc\u p
?什么是
sfc_p.值[sfc_p.shape[:]
应该产生的?我可以用
a=np.one((1,5,6,13))重现错误;打印(a[a.shape[:])
@hpaulj你是说
a=float(a\u n[lev])
b=float(b\u n[lev])
压力[…,lev]=a+b*sfc\u p.值[sfc\u p.shape[:]
?很抱歉,我无法理解您的建议。@wwii
sfc_p
是一个数组,包含纬度-经度网格上的表面压力值以及附加的时间和集合维度。使用
sfc_p.values[sfc_p.shape[:]]
我试图从该数组中获取每个值,并为每个值计算新垂直维度的相应137(在本例中)值。