Python:迭代不同大小的数组
在我的工作中,我试图编写一个函数,从两个输入计算网格垂直水平上的压力: 1) aPython:迭代不同大小的数组,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
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[:]
?很抱歉,我无法理解您的建议。@wwiisfc_p
是一个数组,包含纬度-经度网格上的表面压力值以及附加的时间和集合维度。使用sfc_p.values[sfc_p.shape[:]]
我试图从该数组中获取每个值,并为每个值计算新垂直维度的相应137(在本例中)值。