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

作者:叶庭云 时间:2021-12-20 09:51:20 

一、前言

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

  • 它是基于评价指标的对比强度和指标之间的冲突性来综合衡量指标的客观权重。考虑指标变异性大小的同时兼顾指标之间的相关性,并非数字越大就说明越重要,完全利用数据自身的客观属性进行科学评价。

  • 对比强度是指同一个指标各个评价方案之间取值差距的大小,以标准差的形式来表现。标准差越大,说明波动越大,即各方案之间的取值差距越大,权重会越高;

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

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

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

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

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

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

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

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

初始化一个简单的矩阵:


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))    # 每一行的标准差

结果如下:

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

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

导入需要的依赖库:


import numpy as np
import pandas as pd

提取数据:


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

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

如下所示:

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

数据正向和逆向化处理:


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)

如下所示:

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

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

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

发现结果与文档不一致:

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

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

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

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

来源:https://blog.csdn.net/fyfugoyfa/article/details/121353033

标签:Python,Numpy,矩阵均值标准差
0
投稿

猜你喜欢

  • 教你在SQL Server 2000数据库中使用分区

    2008-11-25 11:55:00
  • SQL 判断给定日期值(或时间段)所在星期的星期一和星期天的日期

    2011-10-24 20:14:52
  • Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)

    2023-12-08 18:55:11
  • python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择

    2022-04-22 01:39:50
  • Asp中Scripting.TextStream 对象介绍

    2007-11-02 12:19:00
  • MyBatis 如何写配置文件和简单使用

    2024-01-26 08:01:18
  • Sql Server查询性能优化之不可小觑的书签查找介绍

    2012-05-22 18:24:53
  • 网页特效文字之—银箔字

    2013-08-07 00:21:39
  • python 中的9个实用技巧,助你提高开发效率

    2021-05-01 08:26:25
  • 用Python制作简单的钢琴程序的教程

    2022-08-20 07:18:49
  • AI:如何训练机器学习的模型

    2023-01-16 13:18:49
  • Oracle分页查询的实例详解

    2024-01-24 15:41:27
  • python 获取页面表格数据存放到csv中的方法

    2021-01-28 02:13:48
  • python-docx的简单使用示例教程

    2023-10-27 08:32:08
  • 使用Spring AOP实现MySQL数据库读写分离案例分析(附demo)

    2024-01-16 04:47:03
  • Oracle SID存在解決方法

    2009-06-19 17:34:00
  • opencv+python识别七段数码显示器的数字(数字识别)

    2022-03-03 00:01:51
  • SQL SERVER日志进行收缩的图文教程

    2024-01-27 13:09:16
  • IE8新特性及IE8安装使用 目录

    2008-04-01 09:50:00
  • linux mysql 报错:MYSQL:The server quit without updating PID file

    2024-01-22 08:40:47
  • asp之家 网络编程 m.aspxhome.com