具有非均匀数组的bin平均值

问题描述 投票:0回答:1

我有一组非均匀速度剖面(速度与高度),我需要对所有剖面进行平均(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个配置文件。

非常感谢你们

python-2.7 binning
1个回答
0
投票

解决问题的方法如下(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)
© www.soinside.com 2019 - 2024. All rights reserved.