Python Numpy实现计算矩阵的均值和标准差详解

 更新时间:2021年11月22日 09:55:16   作者:叶庭云  
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多。本文主要介绍用NumPy实现计算矩阵的均值和标准差,感兴趣的小伙伴可以了解一下

一、前言

CRITIC权重法是一种比熵权法和标准离差法更好的客观赋权法:

  • 它是基于评价指标的对比强度和指标之间的冲突性来综合衡量指标的客观权重。考虑指标变异性大小的同时兼顾指标之间的相关性,并非数字越大就说明越重要,完全利用数据自身的客观属性进行科学评价。
  • 对比强度是指同一个指标各个评价方案之间取值差距的大小,以标准差的形式来表现。标准差越大,说明波动越大,即各方案之间的取值差距越大,权重会越高;

指标之间的冲突性,用相关系数进行表示,若两个指标之间具有较强的正相关,说明其冲突性越小,权重会越低。

对于 CRITIC 权重法而言,在标准差一定时,指标间冲突性越小,权重也越小;冲突性越大,权重也越大;另外,当两个指标间的正相关程度越大时,(相关系数越接近1),冲突性越小,这表明这两个指标在评价方案的优劣上反映的信息有较大的相似性。

在用 Python 复现 CRITIC 权重法时,需要计算变异系数,以标准差的形式来表现,如下所示:

Sj表示第 j 个指标的标准差,在 CRITIC 权重法中使用标准差来表示各指标的内取值的差异波动情况,标准差越大表示该指标的数值差异越大,越能放映出更多的信息,该指标本身的评价强度也就越强,应该给该指标分配更多的权重。

研究收集到湖南省某医院 2011 年 5 个科室的数据,共有 6 个指标,当前希望通过已有数据分析各个指标的权重情况如何,便于医院对各个指标设立权重进行后续的综合评价,用于各个科室的综合比较等。数据如下:

二、详解计算均值和标准差

初始化一个简单的矩阵:

a = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
    ])
a

分别计算整体的均值、每一列的均值和每一行的均值:

print("整体的均值:", np.mean(a))              # 整体的均值
print("每一列的均值:", np.mean(a, axis=0))    # 每一列的均值
print("每一行的均值:", np.mean(a, axis=1))    # 每一行的均值

分别计算整体的标准差、每一列的标准差和每一行的标准差:

print("整体的方差:", np.std(a))              # 整体的标准差
print("每一列的方差:", np.std(a, axis=0))    # 每一列的标准差
print("每一列的方差:", np.std(a, axis=1))    # 每一行的标准差

结果如下:

三、实践:CRITIC权重法计算变异系数

导入需要的依赖库:

import numpy as np
import pandas as pd

提取数据:

df = pd.read_excel("./datas/result03.xlsx")
df

datas = df.iloc[:, 1:]
datas

如下所示:

数据正向和逆向化处理:

X = datas.values
xmin = X.min(axis=0)
xmax = X.max(axis=0)
xmaxmin = xmax - xmin
n, m = X.shape
print(m, n)
for i in range(n):
    for j in range(m):
        if j == 5:
            X[i, j] = (xmax[j] - X[i, j]) / xmaxmin[j]   # 越小越好
        else:
            X[i, j] = (X[i, j] - xmin[j]) / xmaxmin[j]   # 越大越好

X = np.round(X, 5)
print(X)

如下所示:

按列计算每个指标数据的标准差:

发现结果与文档不一致:

原因:numpy默认是除以样本数,求的是母体标准差;而除以样本-1,得到的才是样本标准差,这时设置参数 ddof=1 即可!

如上图所示,这下与文档里的结果一致了!

以上就是Python Numpy实现计算矩阵的均值和标准差详解的详细内容,更多关于Python计算矩阵均值标准差的资料请关注脚本之家其它相关文章!

相关文章

  • python pygame实现挡板弹球游戏

    python pygame实现挡板弹球游戏

    这篇文章主要为大家详细介绍了python pygame实现挡板弹球游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • 使用Python实现将list中的每一项的首字母大写

    使用Python实现将list中的每一项的首字母大写

    今天小编就为大家分享一篇使用Python实现将list中的每一项的首字母大写,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python爬虫使用requests发送post请求示例详解

    python爬虫使用requests发送post请求示例详解

    这篇文章主要介绍了python爬虫使用requests发送post请求示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 教你怎么用python selenium实现自动化测试

    教你怎么用python selenium实现自动化测试

    今天带大家学习怎么用python selenium实现自动化测试,文中有非常详细的介绍及代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • django进阶之cookie和session的使用示例

    django进阶之cookie和session的使用示例

    这篇文章主要介绍了django进阶之cookie和session的使用示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • PyCharm永久激活方式(推荐)

    PyCharm永久激活方式(推荐)

    这篇文章主要介绍了PyCharm永久激活方式,本文通过图文并茂的方式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Python ORM框架之SQLAlchemy 的基础用法

    Python ORM框架之SQLAlchemy 的基础用法

    这篇文章主要介绍了Python ORM框架之SQLAlchemy 的基础用法,ORM全称 Object Relational Mapping对象关系映射,更多详细内容需要的小伙伴课题参考下面文章介绍。希望对你的学习有所帮助
    2022-03-03
  • Python使用Tkinter制作一个进制转换工具

    Python使用Tkinter制作一个进制转换工具

    在平时工作学习当中,我们经常会编写一些简单的 Python GUI 工具,以此来完成各种各样的自动化任务,下面我们就来看看如何使用Python制作一个进制转换工具吧
    2024-01-01
  • Django后端发送小程序微信模板消息示例(服务通知)

    Django后端发送小程序微信模板消息示例(服务通知)

    今天小编就为大家分享一篇Django后端发送小程序微信模板消息示例(服务通知),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • pycharm运行scrapy过程图解

    pycharm运行scrapy过程图解

    这篇文章主要介绍了pycharm运行scrapy过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论