• 【python】Numpy统计函数总结


    函数列表

    最值amin, amax, nanmin, nanmax, 极差ptp
    分位数percentile ∗ ^* quantile ∗ ^* ,
    统计量中位数median ∗ ^* ;平均数mean ∗ ^* ;变化幅度var;加权平均average
    标准差std;协方差cov;相乘求和correlate, 相关系数corrcoef
    直方图histogram, histogram2d, histogramdd

    • 标有星号*的表示存在一个nan开头的同名函数,可以忽略非有效值。例如median对应nanmedian

    上表中大部分函数可以顾名思义,下面对相关系数和直方图做进一步的介绍

    相关系数

    首先回忆一下协方差的概念,对于 X , Y X, Y X,Y两组样本,其协方差可以表示为

    c o v ( X , Y ) = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) n − 1 cov(X,Y) = \frac{\sum_{i=1}^n(x_i-\bar x)(y_i-\bar y)}{n-1} cov(X,Y)=n1i=1n(xixˉ)(yiyˉ)

    numpy中的协方差函数cov,得到的是一个矩阵,分别用于描述 X − X , X − Y , Y − X , Y − Y X-X, X-Y, Y-X, Y-Y XX,XY,YX,YY这四对协方差,对于数组与其自身的协方差,其协方差表达式退化为

    c o v ( X , X ) = ∑ i = 1 n ( x i − x ˉ ) ( x i − x ˉ ) n − 1 = ∑ i = 1 n ( x i − x ˉ ) 2 n − 1 cov(X,X) = \frac{\sum_{i=1}^n(x_i-\bar x)(x_i-\bar x)}{n-1} =\frac{\sum_{i=1}^n(x_i-\bar x)^2}{n-1} cov(X,X)=n1i=1n(xixˉ)(xixˉ)=n1i=1n(xixˉ)2

    这和标准差的公式是极为相近的,Numpy中的标准差公式是

    s t d ( X ) = = ∑ i = 1 n ( x i − x ˉ ) 2 n std(X) = =\sqrt\frac{\sum_{i=1}^n(x_i-\bar x)^2}{n} std(X)==ni=1n(xixˉ)2

    下面输入代码验证一下

    >>> x = np.arange(10)
    >>> np.cov(x,x[::-1])
    array([[ 9.16666667, -9.16666667],
           [-9.16666667,  9.16666667]])
    >>> np.std(x)**2*10/9
    9.166666666666666
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    其中[::-1]表示将数组前后倒置。

    在理解协方差与方差之后,就可以理解相关系数,记 C i j C_{ij} Cij为第 i i i和第 j j j列数组之间的协方差,那么相关系数可表示为

    R i j = C i j C i i C j j R_{ij}=\frac{C_{ij}}{\sqrt{C_{ii}C_jj}} Rij=CiiCjj Cij

    可见,当 i = = j i==j i==j时,数组与其自身的相关系数为1。

    >>> np.corrcoef(x,x[::-1])
    array([[ 1., -1.],
           [-1.,  1.]])
    
    • 1
    • 2
    • 3

    直方图

    histogram用于得到数据直方图数据,histogram2d表示二维的直方图,histogramdd表示高维直方图。其输入参数可表示为

    histogram(a, bins=10, range=None, normed=None, weights=None, density=None)
    
    • 1

    其中

    • a是待统计数组;
    • bins指定区间数
    • range 表示统计区域,例如[0,1]表示统计从0到1的值
    • weights 表示数组权重
    • density 为True时,返回概率密度;为False时,返回元素个数
    a = np.random.normal(size=1000)
    y, x = np.histogram(a, bins=20)
    print(y)
    >>> print(y)
    #[  1   1   1   1   6  11  29  53  74 101 128 140 131 112  90  59  29  18  12   3]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    得到x长度为10,表示每个区间中的元素个数;y的长度为11,表示区间的起止值。

    这个结果可以画图看一下

    import matplotlib.pyplot as plt
    plt.bar(x[:-1], y, width=1, align='edge')
    
    • 1
    • 2

    在这里插入图片描述

    histogram_bin_edgeshistogram功能相同,但只输出直方图的边缘,即上面的y

    digsize(a,y)用于统计数组a中的值对应在y中对应区间的位置,例如y=[1,2,3],则1.5在1和2之间,属于第一个区间;0在1前面,是第0个区间。对应histogram的例子,表示找到ay中的位置。

    bincount可以用于统计正整数的个数

    >>> test = [np.random.randint(20) for _ in range(500)]
    >>> np.bincount(test)
    array([29, 23, 19, 21, 29, 16, 16, 33, 23, 32, 20, 28, 29, 22, 19, 32, 27,
           33, 19, 30], dtype=int64)
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    Tomcat的部署及优化(多实例和动静分离)
    Redis 最流行的图形化界面下载及使用超详细教程(带安装包)! redis windows客户端下载
    【Java-LangChain:使用 ChatGPT API 搭建系统-6】处理输入-链式 Prompt Chaining Prompts
    常用的生命钩子(VUe2方法)
    samba服务器的功能是什么
    springboo+vue 学生会活动组织管理系统java+python项目
    【无标题】
    figma对比sketch有什么优势和不足?
    嵌入式Linux学习(1)——经典CAN介绍(上)
    Maven配置代理
  • 原文地址:https://blog.csdn.net/m0_37816922/article/details/127704983