3 回答
TA贡献1884条经验 获得超4个赞
你可以看看numpy roll()方法。
import numpy as np
weight = 0.5
x = np.array([4, 3, 2])
(x*weight + np.roll(x, -1)*(1-weight))[:-1]
输出:
array([ 3.5, 2.5])
Roll 方法将移动您的原始数组,通过将移动的数组添加到原始数组并将每个数组乘以各自的权重(权重总和为 1),您将获得加权平均值。所有这些都是向量化操作,这将使执行非常流畅。
你可以玩弄weight使第一个或第二个元素产生更大的影响;
TA贡献1815条经验 获得超10个赞
对于更一般的结果,我认为您应该重新归一化权重,使每对的总和为 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]
TA贡献1831条经验 获得超9个赞
给定两个变量:
import numpy as np
elements = 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]
添加回答
举报