我已经用图论的术语来说明这个问题,但是概念化不是必须的。
使用Python,我要做的是生成一个由0和1组成的矩阵,其中每一行都有相同数量的1,每列都有相同数量的1。当行数(发送节点)不等于列数(接收节点数)时,行数与列数不同——这是我允许的。
在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
例如,输出将是:
^{pr2}$注意,每列每行都有两个。除了这个约束之外,它们的位置应该是随机的(并且随着函数的调用而变化)。
在图论术语中,这意味着每个节点的In度为2,out度为2(所有可能连接的50%,如p = 0.5
指定)。
对于正方形矩阵,你所描述的是随机k-regular directed graph的邻接矩阵,并且有已知的算法来生成这样的图。
igraph
实现了一个:networkx有一个用于随机k-正则无向图的函数:
^{pr2}$对于非方阵,你所描述的是同构的随机biregular graph。我发现对于随机双正则图,没有方便的现有实现,但是这个术语应该是搜索已知算法的良好起点。在
首先,做准备工作,这样我们就可以得到方阵的大小和每行和每列的总体数
pop
。现在,用对角线上的pop
个来初始化一个矩阵。对于n=6和pop=3,你应该现在,将友好邻域
random shuffle
操作应用于列,然后应用于行(或按其他顺序)。这是你的矩阵。仅行或列的无序排列不会改变任一轴上的填充。在相关问题 更多 >
编程相关推荐