Bre*_*lla 3 python numpy vectorization
我有一个一维数组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)
Run Code Online (Sandbox Code Playgroud)
有没有办法res不用for循环来计算?
是的,由于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
Run Code Online (Sandbox Code Playgroud)