猿问

为所有节点创建具有相同进出度的矩阵

我已经用图论的术语提出了这个问题,但是概念化不是必需的。


我要使用Python尝试做的是产生一个零和一的矩阵,其中每一行都具有相同的个数,而每一列都具有相同的个数。当行数(发送节点)不等于列数(接收节点)时,行数将与列数不同-这是我允许的。


在中执行此操作对我来说很有意义numpy,但可能还有其他软件包(如networkx?)会有所帮助。


这是我要用所需的输入和输出编写的函数:


n_pre = 4  # number of nodes available to send a connection

n_post = 4  # number of nodes available to receive a connection

p = 0.5  # proportion of all possible connections that exist


mat = generate_mat(n_pre, n_post, p)


print mat

输出将是,例如:


[[0, 1, 0, 1],

 [1, 0, 1, 0],

 [1, 1, 0, 0],

 [0, 0, 1, 1]]

注意,每一列和每一行都有两个。除此约束外,这些函数的位置应该是随机的(并且此函数的调用之间存在差异)。


用图论的术语来说,这意味着每个节点的入度为2,出度为2(如所指定,占所有可能连接的50%p = 0.5)。


互换的青春
浏览 140回答 2
2回答

湖上湖

对于方阵,您要描述的是随机k正则有向图的邻接矩阵,并且有生成此类图的已知算法。igraph实现一个:# I think this is how you call it - it's an instance method for some reason.igraph.Graph().K_Regular(n, k, directed=True)networkx具有用于随机k正则无向图的功能:networkx.random_regular_graph(k, n)对于非正方形矩阵,您所描述的内容与随机双正则图是同构的。我发现对于随机双正则图没有方便的现有实现,但是该术语应该是搜索已知算法的一个很好的起点。
随时随地看视频慕课网APP

相关分类

Python
我要回答