我有一个一维数组 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)
有什么方法可以不用 for 循环来计算 res
吗?
最佳答案
是的,由于 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
关于python - 用于计算向量在不同点拆分的方差的向量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69828099/