每 2 个 Numpy 元素的加权平均值

假设我有这个数组: [4, 3, 2] 我想得到每 2 个元素的加权平均值。因此,我会得到一个看起来像这样的数组(假设权重是 [0.6, 0.4, 0.6]: [3.6, 2.4]

知道如何使用大型阵列(5000)来做到这一点吗?

非常感谢!


翻阅古今
浏览 245回答 3
3回答

慕村9548890

你可以看看numpy roll()方法。import numpy as npweight = 0.5x = np.array([4, 3, 2])(x*weight + np.roll(x, -1)*(1-weight))[:-1]输出:array([ 3.5,  2.5])Roll 方法将移动您的原始数组,通过将移动的数组添加到原始数组并将每个数组乘以各自的权重(权重总和为 1),您将获得加权平均值。所有这些都是向量化操作,这将使执行非常流畅。你可以玩弄weight使第一个或第二个元素产生更大的影响;

动漫人物

对于更一般的结果,我认为您应该重新归一化权重,使每对的总和为 1。这意味着每个权重与其之前或之后的权重配对时可能具有不同的重新归一化值。假设这weights是具有权重的 numpy 数组:normalized_weights = np.column_stack((we[:-1], we[1:]))for i in range(corrwe.shape[0]):    normalized_weights[i][0] = normalized_weights[i][0] / (weights[i] + weights[i+1])    normalized_weights[i][1] = normalized_weights[i][1] / (weights[i] + weights[i+1])normalized_weights是一个 N x 2 矩阵,其中 N 等于len(weights)-1。每行包含一对总和为 1 的权重。例如,如果weights = [0.89779725 0.04136924 0.2877373 0.29153165 0.97000642 0.74452243 0.5714133 0.25224212 0.09493403 0.11448254]thennormalized_weights是:[[0.95595112 0.04404888] [0.12570165 0.87429835] [0.49672488 0.50327512] [0.23109223 0.76890777] [0.56575684 0.43424316] [0.56577416 0.43422584] [0.69375285 0.30624715] [0.72655372 0.27344628] [0.45332625 0.54667375]]现在,如果x是您的数据数组(与 相同的长度weights),您可以通过执行以下操作获得加权的中间点:weighted_middle_x = x[:-1]*normalized_weights[...,0] + x[1:]*normalized_weights[...,1]

天涯尽头无女友

给定两个变量:import numpy as npelements = np.array([4, 3, 2])weights = np.array([0.6, 0.4, 0.6])您将两个数组相乘并将它们保存在一个变量中,只是为了便于阅读: a = elements * weights你做总结。使用该函数,np.roll我们将创建变量 的副本a,但移动了一个位置: res = a + np.roll(a, -1)最后,我们忽略最后一个元素: res = res[0:-1]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python