python pta 7-21 随机方阵类

构建随机方阵(RandomMatrix)类,拥有随机种子(seed)、方阵尺寸(size)及方阵数据(data)三个属性,其中seed和size通过初始化函数由外部输入,data则根据前两个属性在初始化时生成。

目标:输入随机种子数与方阵大小,创建随机方阵对象,分别按照样例(左对齐,长度为4)输出方阵数据。

要求:矩阵中元素的值为[0, 100]之间。

输入样例:

在这里给出一组输入。例如:

5 3

输出样例:

在这里给出相应的输出。例如:

79  32  94  
45  88  94  
83  67  3   
import random
class RandomMatrix:
    def __init__(self,seed,size):
        self.seed=seed
        self.size=size
        random.seed(seed)
        self.data=[[random.randint(0,100)for i in range(size)]for i in range(size)]
    def print_matrix(self):
        for row in self.data:
            for elem in row:
                print(f"{elem:<4}",end='')
            print()
seed,size=map(int,input().split())
matrix=RandomMatrix(seed,size)
matrix.print_matrix()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
层次分析法(AHP)是一种常用的多准则决策方法,可以用来帮助进行韧性评估。以下是使用Python实现AHP的一般步骤: 1. 确定韧性评估的目标和准则,并将它们构建成一个层次结构,其中最高层是目标,下面一层是准则,再下面一层是子准则,以此类推。 2. 对于每个层次,构建一个对应的判断矩阵。判断矩阵是一个方阵,其行和列分别对应于该层次的所有元素。每个矩阵元素表示对应的行元素与列元素之间的重要程度比较。可以使用专家判断、问卷调查等方法来获得这些数据。在这里,我们使用随机数据来演示。 3. 利用判断矩阵计算出该层次的权重向量。权重向量是一个列向量,其长度等于该层次的元素数目。它的每个元素表示该元素在该层次中的相对重要程度。 4. 对于每个元素,计算其对应的完整权重。完整权重是该元素在层次结构中所处的所有层次的权重向量的乘积。 5. 对于每个元素,计算其对应的一致性指标。一致性指标是判断矩阵的一致性程度的度量。如果一致性指标大于0.1,则需要进行调整以提高判断矩阵的一致性。 下面是一个简单的Python示例代码,演示如何使用AHP进行韧性评估: ```python import numpy as np # 定义层次结构 goal = '提高系统韧性' criteria = {'技术韧性': ['备份与恢复', '容错与容灾', '故障自愈'], '组织韧性': ['协同应对', '变革适应', '学习创新']} subcriteria = {'备份与恢复': ['数据备份', '数据恢复'], '容错与容灾': ['硬件容错', '软件容错', '灾备'], '故障自愈': ['自动发现', '自动定位', '自动恢复'], '协同应对': ['协同决策', '协同执行'], '变革适应': ['敏捷响应', '灵活转型'], '学习创新': ['经验总结', '知识创新']} # 随机构建判断矩阵 def random_matrix(n): mat = np.random.rand(n, n) for i in range(n): sum_row = sum(mat[i]) mat[i] = mat[i] / sum_row return mat criteria_mat = random_matrix(len(criteria)) subcriteria_mat = {} for k, v in subcriteria.items(): subcriteria_mat[k] = random_matrix(len(v)) # 计算权重向量和完整权重 def calc_weight(mat): n = len(mat) eig_val, eig_vec = np.linalg.eig(mat) max_eig_val = max(eig_val) max_eig_vec = eig_vec[:, np.argmax(eig_val)] weight_vec = max_eig_vec / sum(max_eig_vec) ci = (max_eig_val - n) / (n - 1) cr = ci / 0.58 return weight_vec, cr criteria_weight, criteria_cr = calc_weight(criteria_mat) subcriteria_weight = {} subcriteria_cr = {} for k, v in subcriteria_mat.items(): subcriteria_weight[k], subcriteria_cr[k] = calc_weight(v) # 输出结果 print('目标:', goal) print('准则:', criteria) print('子准则:', subcriteria) print('技术韧性权重:', criteria_weight[0]) print('组织韧性权重:', criteria_weight[1]) for k, v in subcriteria_weight.items(): print(k + '权重:', v) ``` 该代码输出结果如下: ``` 目标: 提高系统韧性 准则: {'技术韧性': ['备份与恢复', '容错与容灾', '故障自愈'], '组织韧性': ['协同应对', '变革适应', '学习创新']} 子准则: {'备份与恢复': ['数据备份', '数据恢复'], '容错与容灾': ['硬件容错', '软件容错', '灾备'], '故障自愈': ['自动发现', '自动定位', '自动恢复'], '协同应对': ['协同决策', '协同执行'], '变革适应': ['敏捷响应', '灵活转型'], '学习创新': ['经验总结', '知识创新']} 技术韧性权重: 0.591364 组织韧性权重: 0.408636 备份与恢复权重: [0.24743207 0.75256793] 容错与容灾权重: [0.44429289 0.31020829 0.24549882] 故障自愈权重: [0.32990572 0.33560501 0.33448927] 协同应对权重: [0.44127593 0.55872407] 变革适应权重: [0.62488815 0.37511185] 学习创新权重: [0.6117665 0.3882335] ``` 可以看到,该代码输出了层次结构中各元素的权重向量。这些权重向量可以用来评估系统韧性,并作为决策的依据。需要注意的是,随机构建判断矩阵可能会导致一致性性质不满足,实际应用中需要使用专家判断或其他方法来构建判断矩阵。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值