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]
添加回答
舉報