当前位置: 首页 > news >正文

数学建模笔记—— 灰色关联分析[GRA]

数学建模笔记—— 灰色关联分析[GRA]

  • 灰色关联分析(GRA)
    • 1. 相关概念
      • 1.1 灰色系统
      • 1.2 什么是关联分析?
      • 1.3 灰色关联分析
    • 2. 关联分析步骤
    • 3. 典型例题
      • 3.1 关联分析例题
      • 3.2 灰色关联综合评价
    • 4. python代码实现
      • 4.1 关联分析
      • 4.2 灰色关联综合评价

灰色关联分析(GRA)

1. 相关概念

1.1 灰色系统

灰色系统理论是1982年由邓聚龙创立的一门边缘性学科(interdisciplinary)。灰色系统用颜色深浅反映信息量的多少。说一个系统是黑色的,就是说这个系统是黑洞洞的,信息量太少;说一个系统是白色的,就是说这个系统是清楚的,信息量充足。而处于黑白之间的系统,或说信息不完全的系统,称为灰色系统或简称灰系统。

“信息不完全”是灰的基本含义,一般指:

  1. 系统因素不完全明确
  2. 因素关系不完全清楚
  3. 系统的结构不完全知道
  4. 系统的作用原理不完全明了
从表象看明朗若明若暗
从过程看新旧交替
从性质看不纯多种成分
从信息看完全不完全部分完全
从结果看唯一的解无数的解非唯一性
从态度看肯定否定扬弃
从方法看严厉放纵宽容

1.2 什么是关联分析?

所谓关联分析,就是系统地分析因素。回答的问题是:某个包含多种因素的系统中,哪些因素是主要的,哪些是次要的;哪些因素影响大,哪些因素影响小;哪些因素是明显,哪些因素是潜在的。哪些是需要发展的;哪些需要抑制。

现有因素分析的量化方法,大都是数理统计法如回归分析、方差分析、主要成分分析等,这些方法都有下述弱点:

  1. 要求大量数据,数据量少难以找到统计规律
  2. 要求分布是典型的(线性的、指数的或对数的),即使是典型的并非都能处理
  3. 计算工作量大,一般需要计算机帮助
  4. 有时可能出现反常情况,如正相关则断为负相关,以至正确现象受到歪曲和颠倒

1.3 灰色关联分析

灰色关联度分析(Grey Relation Analysis、GRA),是一种多因素统计分析的方法。灰色关联分析方法弥补了采用数理统计方法作系统分析所导致的缺憾。它对样本量的多少和样本有无规律都同样适用,而且计算量小,十分方便,更不会出现量化结果与定性分析结果不符的情况。

灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其联系是否紧密。曲线越接近,相应序列之间的关联度就越大,反之就越小。

对一个抽象的系统或现象进行分析,首先要选准反映系统行为特征的数据序列,称为找系统行为的映射量,用映射量来间接地表征系统行为。例如,用国民平均接受教育的年数来反映教育发达程度,用刑事案件的发案率来反映社会治安面貌和社会秩序,用医院挂号次数来反映国民的健康水平等。有了系统行为特征数据和相关因素的数据,即可作出各个序列的图形,从直观上进行分析。

2. 关联分析步骤

  1. 指标正向化

    所谓正向化处理,就是将极小型、中间型以及区间型指标统一转化为极大型指标。

  2. 确定分析数列

    1. 母序列(又称参考数列,母指标):能反映系统应为特征的数据序列,其类似于因变量 Y Y Y,记为 Y = [ y 1 , y 2 , ⋯ , y n ] T Y=\left[y_{1},y_{2},\cdots,y_{n}\right]^{T} Y=[y1,y2,,yn]T

    2. 子序列(又称比较数列,子指标):影响系统行为的因素组成的数据序列,其类似于自变量 X X X,记为
      X n m = [ x 11 x 12 ⋯ x 1 m x 21 x 22 ⋯ x 2 m ⋮ ⋮ ⋱ ⋮ x n 1 x n 2 ⋯ x n m ] X_{nm}=\begin{bmatrix}x_{11}&x_{12}&\cdots&x_{1m}\\x_{21}&x_{22}&\cdots&x_{2m}\\\vdots&\vdots&\ddots&\vdots\\x_{n1}&x_{n2}&\cdots&x_{nm}\end{bmatrix} Xnm=x11x21xn1x12x22xn2x1mx2mxnm

  3. 数据预处理

    由于不同要素具有不同量纲和数据范围,因此我们要对他们进行预处理去量纲,将他们统一到近似的范围内,先求出每个指标的均值,在用指标中的元素除以其均值
    y k ~ = y k y i , y i ‾ = 1 n ∑ k = 1 n y k x k i ~ = x k i x i , x i ‾ = 1 n ∑ k = 1 n x k i ( i = 1 , 2 , ⋯ , m ) \widetilde{y_{k}}=\frac{y_{k}}{y_{i}},\overline{y_{i}}=\frac{1}{n}\sum_{k=1}^{n}y_{k}\quad\widetilde{x_{ki}}=\frac{x_{ki}}{x_{i}},\overline{x_{i}}=\frac{1}{n}\sum_{k=1}^{n}x_{ki}\left(i=1,2,\cdots,m\right) yk =yiyk,yi=n1k=1nykxki =xixki,xi=n1k=1nxki(i=1,2,,m)

  4. 计算灰色关联系数

    计算子序列中各个指标与母序列的关联系数

    记 为 : a = min ⁡ i min ⁡ k ∣ x 0 ( k ) − x i ( k ) ∣ a=\min_{i}\min_{k}\left | x_{0}\left ( k\right ) - x_{i}\left ( k\right ) \right | a=miniminkx0(k)xi(k), b = max ⁡ i m a x k ∣ x 0 ( k ) − x i ( k ) ∣ b= \max _{i}max_k\left | x_{0}\left ( k\right ) - x_{i}\left ( k\right ) \right | b=maximaxkx0(k)xi(k)

    为两极最小差和最大差

    构造: ξ i ( k ) = y ( x 0 ( k ) , x i ( k ) ) = a + ρ b ∣ x 0 ( k ) − x i ( k ) ∣ + ρ b \xi _i( k) = y\left ( x_{0}\left ( k\right ) , x_{i}\left ( k\right ) \right ) = \frac {a+ \rho b}{\left | x_{0}\left ( k\right ) - x_{i}\left ( k\right ) \right | + \rho b} ξi(k)=y(x0(k),xi(k))=x0(k)xi(k)+ρba+ρb 其中 ρ \rho ρ为分辨系数,一般取0.5

  5. 计算关联度
    r i = 1 n ∑ k = 1 n ξ i ( k ) = 1 n ∑ k = 1 n y ( x 0 ( k ) , x i ( k ) ) r_{i}=\frac{1}{n}\sum_{k=1}^{n}\xi_{i}\left(k\right)=\frac{1}{n}\sum_{k=1}^{n}y\Big(x_{0}\left(k\right),x_{i}\left(k\right)\Big) ri=n1k=1nξi(k)=n1k=1ny(x0(k),xi(k))

3. 典型例题

3.1 关联分析例题

已知某地国民生产总值,工业和农业生产总值,原始数据的形式及来源见下表,分析工业农业哪个对国民生产总值影响大

项目名称年份
2016201720182019
国民生产总值556575100
工业产值24384050
农业产值10221820
  1. 定义母序列及子序列如下

    项目名称年份项目代号
    2016201720182019
    国民生产总值556575100X0(母序列)
    工业产值24384050X1(子序列)
    农业产值10221820X2(子序列)
  2. 数据预处理

    对数据进行均值化 y k ~ = y k y i , y i ‾ = 1 n ∑ k = 1 n y k x k i ~ = x k i x i , x i ‾ = 1 n ∑ k = 1 n x k i ( i = 1 , 2 , ⋯ , m ) \widetilde{y_{k}}=\frac{y_{k}}{y_{i}},\overline{y_{i}}=\frac{1}{n}\sum_{k=1}^{n}y_{k}\quad\widetilde{x_{ki}}=\frac{x_{ki}}{x_{i}},\overline{x_{i}}=\frac{1}{n}\sum_{k=1}^{n}x_{ki}\left(i=1,2,\cdots,m\right) yk =yiyk,yi=n1k=1nykxki =xixki,xi=n1k=1nxki(i=1,2,,m)

    项目名称年份项目代号
    2016201720182019
    国民生产总值0.750.881.021.36(母序列)
    工业产值0.631.001.051.32(子序列)
    农业产值0.571.261.031.14(子序列)
  3. 求关联系数
    a = min ⁡ i min ⁡ k ∣ x 0 ( k ) − x i ( k ) ∣ b = max ⁡ i m a x k ∣ x 0 ( k ) − x i ( k ) ∣ ξ i ( k ) = y ( x 0 ( k ) , x i ( k ) ) = a + ρ b ∣ x 0 ( k ) − x i ( k ) ∣ + ρ b a= \min _{i}\min _{k}\left | x_{0}\left ( k\right ) - x_{i}\left ( k\right ) \right |\\ b= \max _{i}max_k\left | x_{0}\left ( k\right ) - x_{i}\left ( k\right ) \right |\\ \xi _i( k) = y\left ( x_{0}\left ( k\right ) , x_{i}\left ( k\right ) \right ) = \frac {a+ \rho b}{\left | x_{0}\left ( k\right ) - x_{i}\left ( k\right ) \right | + \rho b} a=iminkminx0(k)xi(k)b=imaxmaxkx0(k)xi(k)ξi(k)=y(x0(k),xi(k))=x0(k)xi(k)+ρba+ρb

    kX_0X_1X_2|x_0(k)-x_1(k)||x_0(k)-x_2(k)|
    10.750.630.570.120.18
    20.881.001.260.120.38
    31.021.051.030.030.01
    41.361.321.140.040.22

    得a=0.01,b=0.38
    ξ i ( k ) = y ( x 0 ( k ) , x i ( k ) ) = 0.01 + 0.5 × 0.38 ∣ x 0 ( k ) − x i ( k ) ∣ + 0.5 × 0.38 = 0.2 ∣ x 0 ( k ) − x i ( k ) ∣ + 0.19 \begin{aligned} \xi_{i}\left(k\right)=y\left(x_{0}\left(k\right),x_{i}\left(k\right)\right)& =\frac{0.01+0.5\times0.38}{\left|x_{0}\left(k\right)-x_{i}\left(k\right)\right|+0.5\times0.38} \\ &=\frac{0.2}{\left|x_{0}\left(k\right)-x_{i}\left(k\right)\right|+0.19} \end{aligned} ξi(k)=y(x0(k),xi(k))=x0(k)xi(k)+0.5×0.380.01+0.5×0.38=x0(k)xi(k)+0.190.2

    k ∥ x 0 ( k ) − x 1 ( k ) ∥ \|x_{0}(k)-x_{1}(k)\| x0(k)x1(k) ∥ x 0 ( k ) − x 2 ( k ) ∥ \|x_{0}(k)-x_{2}(k)\| x0(k)x2(k) ξ 1 \xi_1 ξ1 ξ 2 \xi_2 ξ2
    10.120.180.6450.541
    20.120.380.6450.351
    30.030.010.9091.000
    40.040.220.8700.488
  4. 求关联度
    r i = 1 n ∑ k = 1 n ξ i ( k ) = 1 n ∑ k = 1 n y ( x 0 ( k ) , x i ( k ) ) r_{i}=\frac{1}{n}\sum_{k=1}^{n}\xi_{i}\left(k\right)=\frac{1}{n}\sum_{k=1}^{n}y\Big(x_{0}\left(k\right),x_{i}\left(k\right)\Big) ri=n1k=1nξi(k)=n1k=1ny(x0(k),xi(k))

    k ξ 1 \xi_1 ξ1 ξ 2 \xi_2 ξ2
    10.6450.541
    20.6450.351
    30.9091.000
    40.8700.488
    r r r0.7670.595

    r 1 > r 2 r_1>r_2 r1>r2,工业产值关联度更大。

3.2 灰色关联综合评价

换个方法给明星Kun找一个对象,经过层层考察,留下三个候选人。他认为身高165是最好的,体重在90-100斤是最好的。

候选人颜值牌气(争吵次数)身高体重
A910175120
B8716480
C6315790
  1. 数据正向化

    将原始矩阵正向化,就是要将所有的指标类型统一转化为极大型指标。
    X n m = [ x 11 x 12 ⋯ x 1 m x 21 x 22 ⋯ x 2 m ⋮ ⋮ ⋱ ⋮ x n 1 x n 2 ⋯ x n m ] X_{nm}=\begin{bmatrix}x_{11}&x_{12}&\cdots&x_{1m}\\x_{21}&x_{22}&\cdots&x_{2m}\\\vdots&\vdots&\ddots&\vdots\\x_{n1}&x_{n2}&\cdots&x_{nm}\end{bmatrix} Xnm=x11x21xn1x12x22xn2x1mx2mxnm

    候选人颜值牌气(争吵次数)身高体重
    A9000
    B830.90.5
    C670.21
  2. 正向化后的数据进行预处理

    每个指标的元素除以该指标元素的平均值。
    Z n m = [ z 11 z 12 ⋯ z 1 m z 21 z 22 ⋯ z 2 m ⋮ ⋮ ⋱ ⋮ z n 1 z n 2 ⋯ z n m ] Z_{nm}=\begin{bmatrix}z_{11}&z_{12}&\cdots&z_{1m}\\z_{21}&z_{22}&\cdots&z_{2m}\\\vdots&\vdots&\ddots&\vdots\\z_{n1}&z_{n2}&\cdots&z_{nm}\end{bmatrix} Znm=z11z21zn1z12z22zn2z1mz2mznm

    候选人颜值牌气(争吵次数)身高体重
    A1.170.000.000.00
    B1.040.902.451.00
    C0.782.100.552.00
  3. 构造母序列

    选取每个指标的最大值作为母序列
    Y = [ y 1 , y 2 , ⋯ , y n ] T 其中 y i = m a x ( z i 1 , z i 2 , ⋯ , z i m ) Y=\begin{bmatrix}y_1,y_2,\cdots,y_n\end{bmatrix}^T\quad\text{其中}\quad y_i=max\begin{pmatrix}z_{i1},z_{i2},\cdots,z_{im}\end{pmatrix} Y=[y1,y2,,yn]T其中yi=max(zi1,zi2,,zim)

    候选人Y颜值牌气(争吵次数)身高体重
    A1.171.170.000.000.00
    B2.451.040.902.451.00
    C2.100.782.100.552.00
  4. 计算关联系数

    记差值矩阵为 K K K
    K n m = [ k 11 k 12 ⋯ k 1 m k 21 k 22 ⋯ k 2 m ⋮ ⋮ ⋱ ⋮ k n 1 k n 2 ⋯ k n m ] = [ ∣ z 11 − y 11 ∣ ∣ z 2 − y 1 ∣ ⋯ ∣ z 1 m − y 1 ∣ ∣ z 21 − y 2 ∣ ∣ z 22 − y 2 ∣ ⋯ ∣ z 2 m − y 2 ∣ ⋮ ⋮ ⋱ ⋮ ∣ z n 1 − y n ∣ ∣ z n 2 − y n ∣ ⋯ ∣ z n m − y n ∣ ] a = min ⁡ i min ⁡ k ∣ x o ( k ) − x i ( k ) ∣ b = max ⁡ i max ⁡ k ∣ x o ( k ) − x i ( k ) ∣ \begin{aligned}&K_{nm}=\begin{bmatrix}k_{11}&k_{12}&\cdots&k_{1m}\\k_{21}&k_{22}&\cdots&k_{2m}\\\vdots&\vdots&\ddots&\vdots\\k_{n1}&k_{n2}&\cdots&k_{nm}\end{bmatrix}=\begin{bmatrix}\left|z_{11}-y_{11}\right|&\left|z_{2}-y_{1}\right|&\cdots&\left|z_{1m}-y_{1}\right|\\\left|z_{21}-y_{2}\right|&\left|z_{22}-y_{2}\right|&\cdots&\left|z_{2m}-y_{2}\right|\\\vdots&\vdots&\ddots&\vdots\\\left|z_{n1}-y_{n}\right|&\left|z_{n2}-y_{n}\right|&\cdots&\left|z_{nm}-y_{n}\right|\end{bmatrix}\\&a=\min_{i}\min_{k}\left|x_{o}\left(k\right)-x_{i}\left(k\right)\right|b=\max_{i}\max_{k}\left|x_{o}\left(k\right)-x_{i}\left(k\right)\right|\end{aligned} Knm=k11k21kn1k12k22kn2k1mk2mknm=z11y11z21y2zn1ynz2y1z22y2zn2ynz1my1z2my2znmyna=iminkminxo(k)xi(k)b=imaxkmaxxo(k)xi(k)

    候选人 Y Y Y Z 1 Z_1 Z1 Z 2 Z_2 Z2 Z 3 Z_3 Z3 Z 4 Z_4 Z4 ∥ z k 1 − y k ∥ \|z_{k1} - y_k\| zk1yk ∥ z k 2 − y k ∥ \|z_{k2} - y_k\| zk2yk ∥ z k 3 − y k ∥ \|z_{k3} - y_k\| zk3yk ∥ z k 4 − y k ∥ \|z_{k4} - y_k\| zk4yk
    A A A1.171.170.000.000.000.001.171.171.17
    B B B2.451.040.902.451.001.411.550.001.45
    C C C2.100.782.100.552.001.320.001.550.10

    易得a=0,b=1.55
    ξ i ( k ) = y ( x 0 ( k ) , x i ( k ) ) = 0 + 0.5 × 1.55 ∣ x 0 ( k ) − x i ( k ) ∣ + 0.5 × 1.55 = 0.775 ∣ x 0 ( k ) − x i ( k ) ∣ + 0.775 \xi_{i}\left(k\right)=y\left(x_{0}\left(k\right),x_{i}\left(k\right)\right)=\frac{0+0.5\times1.55}{\left|x_{0}\left(k\right)-x_{i}\left(k\right)\right|+0.5\times1.55}=\frac{0.775}{\left|x_{0}\left(k\right)-x_{i}\left(k\right)\right|+0.775} ξi(k)=y(x0(k),xi(k))=x0(k)xi(k)+0.5×1.550+0.5×1.55=x0(k)xi(k)+0.7750.775

    候选人 ∥ z k 1 − y k ∥ \|z_{k1}-y_k\| zk1yk ∥ z k 2 − y k ∥ \|z_{k2}-y_k\| zk2yk ∥ z k 3 − y k ∥ \|z_{k3}-y_k\| zk3yk ∥ z k 4 − y k ∥ \|z_{k4}-y_k\| zk4yk ξ 1 \xi_1 ξ1 ξ 2 \xi_2 ξ2 ξ 3 \xi_3 ξ3 ξ 4 \xi_4 ξ4
    A0.001.171.171.171.0000.3980.3980.398
    B1.411.550.001.450.3550.3331.0000.348
    C1.320.001.550.100.3701.0000.3330.886
  5. 计算关联度
    r i = 1 n ∑ k = 1 n ξ i ( k ) = 1 n ∑ k = 1 n y ( x 0 ( k ) , x i ( k ) ) r_{i}=\frac{1}{n}\sum_{k=1}^{n}\xi_{i}\left(k\right)=\frac{1}{n}\sum_{k=1}^{n}y\Big(x_{0}\left(k\right),x_{i}\left(k\right)\Big) ri=n1k=1nξi(k)=n1k=1ny(x0(k),xi(k))

    候选人 ξ 1 \xi_1 ξ1 ξ 2 \xi_2 ξ2 ξ 3 \xi_3 ξ3 ξ 4 \xi_4 ξ4
    A1.0000.3980.3980.398
    B0.3550.3331.0000.348
    C0.3701.0000.3330.886
    r0.5750.5770.5770.544
  6. 计算指标权重

    将关联度归一化即可得到指标权重
    w i = r i ∑ k = 1 m r k ( i = 1 , 2 , ⋯ , m ) \begin{aligned}w_{i}&=\frac{r_{i}}{\sum_{k=1}^{m}r_{k}}\big(i=1,2,\cdots,m\big)\end{aligned} wi=k=1mrkri(i=1,2,,m)

    候选人颜值脾气(争吵次数)身高体重
    r0.5750.5770.5770.544
    W0.2530.2540.2540.239
  7. 计算得分并归一化

    候选人颜值脾气(争吵次数)身高体重得分归一化得分
    A1.170.000.000.000.2960.099
    B1.040.902.451.001.3530.451
    C0.782.100.552.001.3480.450

因此选择B

4. python代码实现

4.1 关联分析

import numpy as npA = np.array(eval(input("请输入初始矩阵:")))# 求出每一列的均值以供后续的数据处理
Mean = np.mean(A, axis=0)# 预处理后的矩阵
A_norm = A/Meanprint("预处理后的矩阵为:\n", A_norm)# 母序列
Y = A_norm[:, 0]# 子序列
X = A_norm[:, 1:]# 计算|x0-xi|矩阵,这里把x0看作是Y
absX0_Xi = np.abs(X-np.tile(Y.reshape(-1, 1), (1, X.shape[1])))# 计算两级最小差a
a = np.min(absX0_Xi)# 计算两级最大差b
b = np.max(absX0_Xi)# 分布系数取0.5
rho = 0.5# 计算子序列各个指标与母序列的关联系数
gamma = (a+rho*b)/(absX0_Xi+rho*b)print("各个指标与母序列的关联系数为:\n", np.mean(gamma, axis=0))

输入:

[[55,24,10],[65,38,22],[75,40,18],[100,50,20]]

输出:

预处理后的矩阵为:[[0.74576271 0.63157895 0.57142857][0.88135593 1.         1.25714286][1.01694915 1.05263158 1.02857143][1.3559322  1.31578947 1.14285714]]
各个指标与母序列的关联系数为:[0.76966578 0.60058464]

4.2 灰色关联综合评价

import numpy as np# 从用户输入参评数目和指标数目
print("请输入参评数目:")
n = int(input())
print("请输入指标数目:")
m = int(input())# 接受用户输入的类型矩阵
print("请输入类型矩阵:1. 极大型 2. 极小型 3. 中间型 4.区间型")
kind = input().split(" ")# 接受用户输入的矩阵并转化为向量
print("请输入矩阵:")
A = np.zeros(shape=(n, m))
for i in range(n):A[i] = input().split(" ")A[i] = list(map(float, A[i]))
print("输入矩阵为:\n{}".format(A))# 极小型指标转化为极大型指标的函数def minTomax(maxx, x):x = list(x)ans = [[(maxx-e) for e in x]]return np.array(ans)# 中间型指标转化为极大型指标的函数def midTomax(bestx, x):x = list(x)h = [abs(e-bestx) for e in x]M = max(h)if M == 0:M = 1  # 防止最大差值为0的情况ans = [[1-(e/M) for e in h]]return np.array(ans)# 区间型指标转化为极大型指标的函数def regTomax(lowx, highx, x):x = list(x)M = max(lowx-min(x), max(x)-highx)if M == 0:M = 1  # 防止最大差值为0的情况ans = []for i in range(len(x)):if x[i] < lowx:ans.append(1-(lowx-x[i])/M)elif x[i] > highx:ans.append(1-(x[i]-highx)/M)else:ans.append(1)return np.array([ans])# 同一指标类型,将所有指标转化为极大型指标
X = np.zeros(shape=(n, 1))
for i in range(m):if kind[i] == "1":v = np.array(A[:, i])elif kind[i] == "2":maxA = max(A[:, i])v = minTomax(maxA, A[:, i])elif kind[i] == "3":print("类型三,请输入最优值:")bestA = eval(input())v = midTomax(bestA, A[:, i])elif kind[i] == "4":print("类型四,请输入区间[a,b]值a:")lowA = eval(input())print("类型四,请输入区间[a,b]值b:")highA = eval(input())v = regTomax(lowA, highA, A[:, i])if i == 0:X = v.reshape(-1, 1)  # 如果是第一个指标,直接赋值else:X = np.hstack((X, v.reshape(-1, 1)))  # 如果不是第一个指标,横向拼接
print("统一指标后矩阵为:\n{}".format(X))# 对正向化后的矩阵进行预处理
Mean = np.mean(X, axis=0)
Z = X/Mean
print("预处理后的矩阵为:")
print(Z)# 构造母序列和子序列
Y = np.max(Z, axis=1)  # 选取每一行最大值构成列向量的母序列
X = Z# 计算得分
absX0_Xi = np.abs(X-np.tile(Y.reshape(-1, 1), (1, X.shape[1])))
a = np.min(absX0_Xi)
b = np.max(absX0_Xi)# 分辨系数
rho = 0.5
gamma = (a+rho*b)/(absX0_Xi+rho*b)  # 计算关联系数
weight = np.mean(gamma, axis=0)/np.sum(np.mean(gamma, axis=0))  # 利用子序列中各个指标与母序列的灰色关联度计算权重
score = np.sum(X*np.tile(weight, (X.shape[0], 1)), axis=1)  # 未归一化得分
stand_S = score/np.sum(score)  # 归一化得分
sorted_S = np.sort(stand_S)[::-1]  # 进行降序排序
index = np.argsort(stand_S)[::-1]  # 得到排序后的索引print("归一化后的得分及其索引(降序):")
print(sorted_S)
print(index)

输入:

请输入参评数目:
3
请输入指标数目:
4
请输入类型矩阵:1. 极大型 2. 极小型 3. 中间型 4.区间型
1 2 3 4
请输入矩阵:
9 10 175 120
8 7 164 80
6 3 157 90
输入矩阵为:
[[  9.  10. 175. 120.][  8.   7. 164.  80.][  6.   3. 157.  90.]]
类型三,请输入最优值:165
类型四,请输入区间[a,b]值a:
90 
类型四,请输入区间[a,b]值b:
100

输出:

统一指标后矩阵为:
[[9.  0.  0.  0. ][8.  3.  0.9 0.5][6.  7.  0.2 1. ]]
预处理后的矩阵为:
[[1.17391304 0.         0.         0.        ][1.04347826 0.9        2.45454545 1.        ][0.7826087  2.1        0.54545455 2.        ]]
归一化后的得分及其索引(降序):
[0.45160804 0.44937917 0.0990128 ]
[1 2 0]

相关文章:

数学建模笔记—— 灰色关联分析[GRA]

数学建模笔记—— 灰色关联分析[GRA] 灰色关联分析(GRA)1. 相关概念1.1 灰色系统1.2 什么是关联分析&#xff1f;1.3 灰色关联分析 2. 关联分析步骤3. 典型例题3.1 关联分析例题3.2 灰色关联综合评价 4. python代码实现4.1 关联分析4.2 灰色关联综合评价 灰色关联分析(GRA) 1.…...

ICM20948 DMP代码详解(13)

接前一篇文章&#xff1a;ICM20948 DMP代码详解&#xff08;12&#xff09; 上一回完成了对inv_icm20948_set_chip_to_body_axis_quaternion函数第2步即inv_rotation_to_quaternion函数的解析。回到inv_icm20948_set_chip_to_body_axis_quaternion中来&#xff0c;继续往下进行…...

【论软件需求获取方法及其应用】

摘要 2023 年 3 月&#xff0c;我所在的公司承接了某油企智慧加油站平台的建设工作。该项目旨在帮助加油站提升运营效率、降低运营成本和提高销售额。我在该项目中担任系统架构设计师&#xff0c;负责整个项目的架构设计工作。 本文以该项目为例&#xff0c;详细论述软件需求获…...

使用ESP8266和OLED屏幕实现一个小型电脑性能监控

前言 最近大扫除&#xff0c;发现自己还有几个ESP8266MCU和一个0.96寸的oled小屏幕。又想起最近一直想要买一个屏幕作为性能监控&#xff0c;随机开始自己diy。 硬件&#xff1a; ESP8266 MUColed小屏幕杜邦线可以传输数据的数据线 环境 Windows系统Qt6Arduino Arduino 库…...

Nexpose v6.6.266 for Linux Windows - 漏洞扫描

Nexpose v6.6.266 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, release Aug 21, 2024 请访问原文链接&#xff1a;https://sysin.org/blog/nexpose-6/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.o…...

ess6新特性

1、let、const 块级作用域声明变量和常量 2、箭头函数 不能构建函数 不能new 没.prototype属性 没有this指向 this指向是根据上下文的 往上层查找 没有arguments(参数) 3、模板字符串 ${} 字符串中嵌入表达式 4、解构赋值 5、Promise 处理异步操作的标准机制 6、for of 遍历…...

C语言蓝桥杯:语言基础

竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_search函数&#xff0c;用于查找…...

axure之变量

一、设置我们的第一个变量 1、点击axure上方设置一个全局变量a 3 2、加入按钮、文本框元件点击按钮文档框展示变量值。 交互选择【单击时】【设置文本】再点击函数。 点击插入变量和函数直接选择刚刚定义的全局变量&#xff0c;也可以直接手动写入函数(注意写入格式。) 这…...

vue缓存用法

Store 临时缓存 特点&#xff1a;需要定义&#xff0c;有初始值、响应式、全局使用、刷新重置 Pinia官方文档 https://pinia.vuejs.org 创建 store 缓存 示例代码 import {defineStore} from pinia import {store} from //storeexport const useMyStore defineStore({// 定义…...

栈入门,括号匹配问题

利用栈这道题应该很轻松可以解决&#xff0c;下面给出常用的代码&#xff1a; public static boolean isValid(String s) {// 创建一个栈来保存左括号Stack<Character> stack new Stack<>();// 遍历字符串中的每个字符for (char c : s.toCharArray()) {// 如果是…...

Vue入门学习笔记-表单

可以使用v-model 指令在表单控件元素上创建双向数据绑定。 引言&#xff1a; Vue采用了MVVM&#xff08;Model-View-ViewModel&#xff09;架构模式&#xff0c;通过指令可以快速实现数据和视图的双向绑定 修改视图层时&#xff0c;模型层也会改变&#xff1b;修改模型层&#…...

TCP通信三次握手、四次挥手

目录 前言 一、三次握手 TCP三次握手的详细过程 二、四次挥手 四次挥手的详细过程 前言 前面我说到了&#xff0c;UDP通信的实现&#xff0c;但我们经常说UDP通信不可靠&#xff0c;是因为他只会接收和发送&#xff0c;并不会去验证对方收到没有&#xff0c;那么我们说TCP通…...

【实施文档】软件项目实施方案(Doc原件2024实际项目)

软件实施方案 二、 项目介绍 三、 项目实施 四、 项目实施计划 五、 人员培训 六、 项目验收 七、 售后服务 八、 项目保障措施软件开发管理全套资料包清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&am…...

BeanFactory vs. ApplicationContext

在Spring框架中&#xff0c;BeanFactory和ApplicationContext都是用于管理Spring容器中的bean的接口&#xff0c;但它们在功能和应用场景上有所不同。下面是它们的主要区别&#xff1a; 1. 基础功能 vs. 扩展功能 BeanFactory: 是Spring框架的最基础的IoC容器&#xff0c;提供…...

JDBC客户端连接Starrocks 2.5

<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…...

004——双向链表和循环链表

目录 双向链表 双向链表的初始化&#xff08;与单链表类似&#xff09; 增&#xff1a; Ⅰ&#xff09;头插法 Ⅱ&#xff09;尾插法 Ⅲ&#xff09;中间插入 删 改 查 整体代码示例&#xff1a; 循环链表 循环单链表 ​编辑 循环双链表 双向链表 不同于单链表&…...

framebuffer帧缓存

framebuffer:帧缓冲&#xff0c;帧缓存 Linux内核为显示提供的一套应用程序接口。&#xff08;驱动内核支持&#xff09; framebuffer本质上是一块显示缓存&#xff0c;往显示缓存中写入特定格式的数据就意味着向屏幕输出内容。framebuffer驱动程序控制LCD显示设备&#xff0…...

24_竞赛中的高效并查集

菜鸟&#xff1a;老鸟&#xff0c;我最近在做一个与社交网络相关的项目&#xff0c;需要频繁地检查两个用户是否属于同一个群组。但我发现每次检查都很耗时&#xff0c;性能很差。你有什么建议吗&#xff1f; 老鸟&#xff1a;你可以试试使用并查集&#xff08;Union-Find&…...

新手c语言讲解及题目分享(十七)--运算符与表达式专项练习

本文主要讲解c语言的基础部分&#xff0c;运算符与表达式的学习&#xff0c;在这一部分中&#xff0c;往往有许多细节的东西需要去记住。当各种运算符一起用时&#xff0c;就会存在优先级的关系&#xff0c;本文末尾有各种运算符的优先级顺序表。 参考书目和推荐学习书目&#…...

香帅的金融学讲义:深入剖析与解读

香帅的金融学讲义&#xff1a;深入剖析与解读 金融学&#xff0c;这个看似高深复杂的学科&#xff0c;实则与我们的生活息息相关。从个人理财到国家宏观经济政策&#xff0c;金融学无处不在。那么&#xff0c;如何更好地理解金融学呢&#xff1f;今天&#xff0c;我们就来借助…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...