两个值的平均值
a,并
b为
0.5*(a+b)
因此你可以做这样的:
newArray = 0.5*(originalArray[0::2] + originalArray[1::2])
它将所有连续的两行相加,最后将每个元素乘以
0.5。
由于在标题中您要在N行上求平均值,因此这是一个更通用的解决方案:
def groupedAvg(myArray, N=2): result = np.cumsum(myArray, 0)[N-1::N]/float(N) result[1:] = result[1:] - result[:-1] return result
n元素上的均值的一般形式是
sum([x1,x2,...,xn])/n。向量中
mto的元素之和与从的th元素减去th元素相同。 除非
为0, 否则 您将不减去任何值(结果[0])。
这就是我们在这里利用的优势。另外,由于所有内容都是线性的,因此除以并不重要,因此我们一开始就要做,但这只是一个问题。
m+n``v``m-1``m+n``cumsum(v)
m
N
如果最后一组的
N元素少于个,它将被完全忽略。如果您不想忽略它,则必须特别对待最后一组:
def avg(myArray, N=2): cum = np.cumsum(myArray,0) result = cum[N-1::N]/float(N) result[1:] = result[1:] - result[:-1] remainder = myArray.shape[0] % N if remainder != 0: if remainder < myArray.shape[0]: lastAvg = (cum[-1]-cum[-1-remainder])/float(remainder) else: lastAvg = cum[-1]/float(remainder) result = np.vstack([result, lastAvg]) return result



