abumelq 2021-05-07 09:04 采纳率: 100%
浏览 72
已采纳

python生成的矩阵以固定数目赋值

根据无向网络生成了一个邻接矩阵,想解决的问题是在非0处随机赋值。比如矩阵中的非0数有10个,想要7个位置赋值[1,3]范围,另外3个位置赋值在[4,10]范围。我只想到了如何在非0处随机赋值。

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
import random


#无向图
BA=nx.barabasi_albert_graph(5,1)#barabasi_albert_graph(n, m)方法生成一个含有n个节点、每次加入m条边的BA无标度网络
n = nx.number_of_nodes(BA)
m = nx.number_of_edges(BA)
# print(n,m)
matrix = nx.to_numpy_matrix(BA)
matrix_up = np.triu(matrix)#取矩阵的上三角
num = 0
for i in range(n):
    for j in range(n):
        if matrix_up[i][j] != 0:
            num = num +1
            matrix_up[i][j] = random.randint(1,9)
print('改变后的邻接矩阵:\n',matrix_up)

哪位大佬能帮忙解答下嘛,炒鸡炒鸡感谢!!!

 

  • 写回答

2条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-05-07 13:50
    关注
    >>> import numpy as np
    >>> arr = np.random.randint(0, 2, (4,5)) # 测试用的矩阵,只有0和1两种元素
    >>> arr
    array([[1, 0, 1, 0, 1],
           [1, 0, 1, 1, 0],
           [0, 0, 0, 1, 1],
           [1, 0, 1, 0, 0]])
    >>> rows, cols = np.where(arr>0) # 找出非零元素的行和列
    >>> rows
    array([0, 0, 0, 1, 1, 1, 2, 2, 3, 3], dtype=int64)
    >>> cols
    array([0, 2, 4, 0, 2, 3, 3, 4, 0, 2], dtype=int64)
    >>> choices = np.arange(rows.shape[0]) # 非零元素编号
    >>> group_1 = np.random.choice(choices, size=3, replace=False) # 随机选中3个分为一组
    >>> group_2 = np.setdiff1d(choices, group_1) # 剩余为另一组
    >>> group_1
    array([4, 2, 1])
    >>> group_2
    array([0, 3, 5, 6, 7, 8, 9])
    >>> arr[(rows[group_1], cols[group_1])] = np.random.randint(1,4) # 第1组赋值
    >>> arr[(rows[group_2], cols[group_2])] = np.random.randint(4,11) # 第2组赋值
    >>> arr
    array([[6, 0, 2, 0, 2],
           [6, 0, 2, 6, 0],
           [0, 0, 0, 6, 6],
           [6, 0, 6, 0, 0]])
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 origin绘制有显著差异的柱状图和聚类热图
  • ¥20 simulink实现滑模控制和pid控制对比,提现前者优势
  • ¥30 开发一款闲置物资借用管理软件
  • ¥15 (有偿)1500/怎么让网络延迟网速不变/需要做成软件/
  • ¥15 空调变频器板怎么测试可靠性和性能
  • ¥15 uniapp开发:微信小程序使用drawImage绘制第二次时不生效?
  • ¥500 tdx winner 函数计算公式,需和官方一样,1000元
  • ¥15 word 样式管理树状设计
  • ¥15 中国json地图的点击事件
  • ¥15 前端是实现管道重叠效果