zoukankan      html  css  js  c++  java
  • ISM模型:用python实现可达矩阵求解和层级划分

    ISM模型求解可达矩阵和元素分层,网上已有matlab代码实现。但是由于最近碰到一个求解要素比较多的问题,四十多个要素。如果手动输入这个矩阵的话,有一千多个数据,不清楚matlab是否有文件导入导出功能,所以照着matlab代码尝试写了一段python,用pandas导入导出矩阵,比较方便,代码如下:

     1 import numpy as np
     2 import pandas as pd
     3 import numpy.matlib
     4 #用pandas导入数据
     5 file_path='C:/Users/84430/Desktop/指标.xlsx'
     6 sheetName='Sheet5'
     7 df=pd.read_excel(file_path,sheet_name=sheetName)
     8 #处理一下,转为arrary
     9 df.set_index('F',inplace=True)
    10 df.index.name=None
    11 array=np.array(df)
    12 #转为矩阵
    13 A=np.matrix(array)
    14 #生成一个单位矩阵
    15 I=np.matlib.identity(len(A))
    16 #计算A+I
    17 new_matrix=A+I
    18 old_matrix=new_matrix
    19 m=0
    20 step=1
    21 while m==0:
    22     old_matrix=new_matrix
    23     new_matrix=old_matrix*new_matrix
    24     for i in range(len(new_matrix)):
    25         for j in range(len(new_matrix)):
    26             if new_matrix[i,j]>=1:
    27                 new_matrix[i,j]=1
    28     step+=1
    29     print(step)
    30 # 求解打印出可达矩阵并保存为文件
    31     if (old_matrix==new_matrix).all():
    32         m=1
    33         print(new_matrix,step)
    34         pd_matrix=pd.DataFrame(new_matrix)
    35         pd_matrix.to_csv('./可达矩阵和分级(45).csv')
    36 # 元素分级
    37 P=np.array(new_matrix)
    38 
    39 zero=np.zeros(shape=(len(P),len(P)))
    40 r=1
    41 while not (P==zero).all():
    42     for i in range(0,len(P)):
    43         R=[x+1 for (x,val) in enumerate(P[i,:]) if val==1]
    44         A=[x+1 for (x,val) in enumerate(P[:,i]) if val==1]
    45         C=set(R).intersection(set(A))#返回交集
    46         if len(C)==len(R) and len(R)!=0 and len(A)!=0:
    47 # 打印出分级结果
    48             print(''+str(r)+'级元素为'+str(i+1))
    49             P[i,i]=0
    50     for x in range(0,len(P)):
    51         if P[x,x]==0:
    52             P[x,:]=0
    53             P[:,x]=0
    54     r+=1
  • 相关阅读:
    简单实现 C# 与 Javascript的兼容
    如何写好CSS系列之表单(form)
    D3、openlayers的一次尝试
    如何写好css系列之button
    mockjs,json-server一起搭建前端通用的数据模拟框架
    AIX中的/etc/inittab文件
    AIX中crontab和at 定时任务
    AIX中的服务管理
    AIX系统的备份和恢复
    AIX中磁带设备的使用
  • 原文地址:https://www.cnblogs.com/xiaoyang217/p/12607734.html
Copyright © 2011-2022 走看看