【问题标题】:All possible binary matrices with some properties具有某些属性的所有可能的二进制矩阵
【发布时间】:2019-04-29 08:21:19
【问题描述】:

我需要生成所有可能的 4x4 二进制矩阵,这些矩阵在主对角线上有零,是对称的,并且有六个条目等于 1。一些示例:

[[0,0,0,0],
 [0,0,1,1],
 [0,1,0,1],
 [0,1,1,0]],

[[0,1,1,0],
 [1,0,1,0],
 [1,1,0,0],
 [0,0,0,0]],  

[[0,1,0,1],
 [1,0,0,1],
 [0,0,0,0],
 [1,1,0,0]]

我如何在 Python 中做到这一点?

【问题讨论】:

标签: python matrix binary-matrix


【解决方案1】:

这相当于选择六个条目中的哪三个 对角线上方是 1。

来自 4 x 4 矩阵中的对角线上方位置列表:

sage: positions = [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

使用 Sage 的 Subsets 获取这些位置中大小为 3 的所有子集。

sage: S = Subsets([(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)], 3)

然后构建相应的矩阵。

sage: [matrix(ZZ, 4, lambda i, j: (i, j) in s or (j, i) in s) for s in S]
[
[0 1 1 1]  [0 1 1 0]  [0 1 1 0]  [0 1 1 0]  [0 1 0 1]  [0 1 0 1]
[1 0 0 0]  [1 0 1 0]  [1 0 0 1]  [1 0 0 0]  [1 0 1 0]  [1 0 0 1]
[1 0 0 0]  [1 1 0 0]  [1 0 0 0]  [1 0 0 1]  [0 1 0 0]  [0 0 0 0]
[1 0 0 0], [0 0 0 0], [0 1 0 0], [0 0 1 0], [1 0 0 0], [1 1 0 0],

[0 1 0 1]  [0 1 0 0]  [0 1 0 0]  [0 1 0 0]  [0 0 1 1]  [0 0 1 1]
[1 0 0 0]  [1 0 1 1]  [1 0 1 0]  [1 0 0 1]  [0 0 1 0]  [0 0 0 1]
[0 0 0 1]  [0 1 0 0]  [0 1 0 1]  [0 0 0 1]  [1 1 0 0]  [1 0 0 0]
[1 0 1 0], [0 1 0 0], [0 0 1 0], [0 1 1 0], [1 0 0 0], [1 1 0 0],

[0 0 1 1]  [0 0 1 0]  [0 0 1 0]  [0 0 1 0]  [0 0 0 1]  [0 0 0 1]
[0 0 0 0]  [0 0 1 1]  [0 0 1 0]  [0 0 0 1]  [0 0 1 1]  [0 0 1 0]
[1 0 0 1]  [1 1 0 0]  [1 1 0 1]  [1 0 0 1]  [0 1 0 0]  [0 1 0 1]
[1 0 1 0], [0 1 0 0], [0 0 1 0], [0 1 1 0], [1 1 0 0], [1 0 1 0],

[0 0 0 1]  [0 0 0 0]
[0 0 0 1]  [0 0 1 1]
[0 0 0 1]  [0 1 0 1]
[1 1 1 0], [0 1 1 0]
]

请注意,这些是所有图的邻接矩阵 在四个标记的顶点上具有三个边。

如果您想要未标记的顶点,或者等效的列表 图的等价类的邻接矩阵 在四个顶点上具有三个边,您可以使用 Nauty 列举它们。以下是 Sage 的方法:

sage: G = graphs.nauty_geng("4 3:3")
sage: G
<generator object nauty_geng at 0x21c89a0f0>
sage: [g.adjacency_matrix() for g in G]
[
[0 0 0 1]  [0 0 1 1]  [0 0 1 1]
[0 0 0 1]  [0 0 0 1]  [0 0 0 0]
[0 0 0 1]  [1 0 0 0]  [1 0 0 1]
[1 1 1 0], [1 1 0 0], [1 0 1 0]
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多