我有一组非均匀速度剖面(速度与高度),我需要对所有剖面进行平均(1 km剖面)。这是三个“合成”配置文件的示例:
testalt1 = np.arange(70,75,1)
testalt2 = np.arange(72,80,1)
testalt3 = np.arange(60,69,1)
vtest1 = np.arange(-2,3,1)
vtest2 = np.arange(-3,5,1)
vtest3 = np.arange(-3,6,1)
print testalt1,testalt2, testalt3
print vtest1,vtest2, vtest3
输出:
[70 71 72 73 74] [72 73 74 75 76 77 78 79] [60 61 62 63 64 65 66 67 68]
[-2 -1 0 1 2] [-3 -2 -1 0 1 2 3 4] [-3 -2 -1 0 1 2 3 4 5]
因此,我的代码的最终结果应该是一个配置文件,该配置文件在发生重叠时会求平均值,并只取一个存在它的数组的值。例如:
结果altmean
应该是:
[60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79]
从海拔60 km到68 km,vmean
的输出应为:
[-3 -2 -1 0 1 2 3 4 5]
对于海拔69,我们应该有一个NaN
。然后,altmean = [70 71]
应具有vmean = [-2 -1]
,与vtest1
的值相对应。只要有重叠,例如在72至74公里之间的范围内,平均就会开始,应该输出:
altmean = [72 73 74]
vmean = [-1.5 -0.5 0.5]
最终输出应为:
altmean = [60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79]
vmean = [-3 -2 -1 0 1 2 3 4 5 NaN -2 -1 -1.5 -0.5 0.5 0 1 2 3 4]
该解决方案最多应扩展到50个配置文件。
非常感谢你们
解决问题的方法如下(u只是具有不同成分的数组):
def averagingarrays(alt1,v1,u1,alt2,v2,u2):
altmin = np.min([np.min(alt1),np.min(alt2)])
altmax = np.max([np.max(alt1),np.max(alt2)])
altarray = np.arange(altmin,altmax+1,1)
vmean = np.zeros(np.size(altarray))
umean = np.zeros(np.size(altarray))
vc = 0
for alt in altarray:
altw1 = np.where(alt1 == alt)[0]
altw2 = np.where(alt2 == alt)[0]
if np.size(altw1) != 0 and np.size(altw2) != 0:
vmean[vc] = np.nanmean([v1[altw1], v2[altw2]])
umean[vc] = np.nanmean([u1[altw1], u2[altw2]])
if np.size(altw1) != 0 and np.size(altw2) == 0:
vmean[vc] = v1[altw1]
umean[vc] = u1[altw1]
if np.size(altw2) != 0 and np.size(altw1) == 0:
vmean[vc] = v2[altw2]
umean[vc] = u2[altw2]
if np.size(altw1) == 0 and np.size(altw2) == 0:
vmean[vc] = np.NaN
umean[vc] = np.NaN
#print altw1, alt
vc = vc+1
return altarray,vmean,umean
aux = averagingarrays(testalt1,vtest1,utest1, testalt2,vtest2,utest2)
print averagingarrays(aux[0],aux[1],aux[2], testalt3,vtest3,utest3)