Loading

均值方差合并

公式:

  • 参考: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))
posted @ 2023-03-17 15:29  摇头晃脑学知识  阅读(323)  评论(0编辑  收藏  举报