我有一组成对的numpy数组。一对中的每个阵列的长度相同,但是不同对中的阵列具有不同的长度。此集合中的一对数组的示例是:
Time: [5,8,12,17,100,121,136,156,200]
Score: [3,4,5,-10,-90,-80,-70,-40,10]
另一对是:
Time: [6,7,9,15,199]
Score: [5,6,7,-11,-130]
我需要根据时间对所有这些对进行平均(或执行合并)。即,应将时间分为10个间隔,并且每个间隔的相应分数都必须平均。
因此,对于以上2对,我想要以下结果:
Time: [1-10,11-20,21-30,31-40,41-50,...,191-200]
Score: [(3+4+5+6+7)/5, (5-10-11)/2, ...]
我该怎么做?是否有比将所有东西单独装箱然后取平均值的简单方法?如何根据另一个阵列的仓位对一个阵列进行仓位?即对于单个数组,如何将时间数组分成10个间隔,然后使用此结果以一致的方式对相应的得分数组进行归档?
答案 0 :(得分:1)
您可以使用scipy.stats.binned_statistic
。这是直方图函数的一般化。直方图将空间划分为bin,然后返回每个bin中的点数的 count 。此功能允许计算每个bin中的值(或一组值)的和,均值,中位数或其他统计信息。
from scipy import stats
import numpy as np
T1 = [5,8,12,17,100,121,136,156,200]
S1 = [3,4,5,-10,-90,-80,-70,-40,10]
T2 = [6,7,9,15,199]
S2 = [5,6,7,-11,-130]
# Merging all Times and Scores in order
Time = T1 + T2
Score = S1 + S2
output = stats.binned_statistic(Time, Score, statistic='mean',range=(0,200), bins=20)
averages = output[0]
# For empty bins, it generates NaN, we can replace them with 0
print( np.nan_to_num(averages, 0) )
# Output of this code:
# [ 5. -5.33333333 0. 0. 0.
# 0. 0. 0. 0. 0.
# -90. 0. -80. -70. 0.
# -40. 0. 0. 0. -60. ]
有关更多信息,请遵循this link。