首页 > 解决方案 > 给定一个数字计数器,如何有效地计算方差或标准差?

问题描述

例如,给定下一个直方图和箱:

import numpy as np
hist = np.array([1,1,2,1,2])
bins = np.array([0,1,2,3,4 ])

¿ 计算方差的最有效方法是什么?一种方法是重新创建数组并将其传递给np.var函数:

import numpy as np
np.var(np.array([0, 1, 2, 2, 3, 4, 4]))

但是,我认为这不是很有效。

标签: pythonnumpyvariance

解决方案


所以你可以重写公式

counts  = hist.sum()
mean = (hist*bins).sum() / counts

sum_squares = (bins**2 * hist).sum()
var = sum_squares/counts - mean ** 2

# test
np.isclose(var, np.var(np.repeat(bins, hist)))

输出True


推荐阅读