python - 用于计算向量在不同点拆分的方差的向量化

标签 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)

有什么方法可以不用 for 循环来计算 res 吗?

最佳答案

是的,由于 var = sum_squares/N - mean**2mean = 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/

相关文章:

python - 如何加载 csv 文件并将其内容存储到 python 中的 (numpy) 数组中?

python - 如何将不同形状的np数组组合在一起并按行分开

python - 无法让 matplotlib/numpy 工作

matlab - 矩阵内的操作避免循环

R:比这个for循环更有效的解决方案

python - 在python中读取yaml文件时如何跳过行?

python - 满足自定义操作后,插槽不会重置

Python 已停止工作

python - 取消堆叠和交换 Pandas 的水平

python - "only size-1 arrays can be converted to Python scalars"或 "` x0 ` must have at most 1 dimension"