均值方差合并
公式:
- 参考:link
A数组包含m个元素,均值为mean1,方差为Var1,B数组包含n个元素,均值为mean2,方差为Var2
\[mean = (n \cdot mean1 + m \cdot mean2) / (m + n) \\
var = (n \cdot (var1 + mean1^2) + m \cdot (var2 + mean2^2))/(m + n) - mean^2
\]
- 注:如果m=2100, n=1100, 令m=2, n=1输出到公式即可,因为可以约掉。
Python代码
import math
import numpy as np
def merge_mean_var(n, mean1, var1, m, mean2, var2):
"""
已知两组数据的个数,均值和方差,求总数据的均值和方差
Args:
n: 第一组数据的个数
mean1: 第一组数据的均值
var1: 第一组数据的方差
m: 第二组数据的个数
mean2: 第二组数据的均值
var2: 第二组数据的方差
Returns:
所有数据的个数,均值,方差
"""
mean = (n * mean1 + m * mean2) / (m + n)
var = (n * (var1 + mean1**2) + m * (var2 + mean2**2))/(m + n) - mean**2
return m+n, mean, var
def get_mean_var(array):
mean = np.mean(array)
var = np.var(array)
return mean, var
if __name__ == '__main__':
array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
array1 = np.array([1, 3, 5, 7, 9])
array2 = np.array([2, 4, 6, 8])
mean, var = get_mean_var(array)
mean1, var1 = get_mean_var(array1)
mean2, var2 = get_mean_var(array2)
print(mean, var)
print(mean1, var1)
print(mean2, var2)
print(merge_mean_var(array1.size, mean1, var1, array2.size, mean2, var2))