我有一個一維陣列arr,我需要計算從位置 0 開始的所有可能的連續子向量的方差。使用 for 回圈可能更容易理解:
np.random.seed(1)
arr = np.random.normal(size=100)
res = []
for i in range(1, arr.size 1):
subvector = arr[:i]
var = np.var(subvector)
res.append(var)
有沒有辦法res不用for回圈來計算?
uj5u.com熱心網友回復:
是的,因為var = sum_squares / N - mean**2, 和mean = sum /N,你可以做得到cumsum累計總和:
cumsum = np.cumsum(arr)
cummean = cumsum/(np.arange(len(arr)) 1)
sq = np.cumsum(arr**2)
# correct the dof here
cumvar = sq/(np.arange(len(arr)) 1) - cummean**2
np.allclose(res, cumvar)
# True
uj5u.com熱心網友回復:
使用熊貓,您可以使用expanding:
import pandas as pd
pd.Series(arr).expanding().var(ddof=0).values
注意。優點之一是可以從var引數中受益(默認情況下ddof=1),當然,您還可以運行許多其他方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348727.html
