0

我是数学系的一年级学生,我还没有编程课。

我正在做一个项目,为了简化我的计算,最好实现一个程序来计算与完整布尔格Q_n相对应的矩阵,这是一组从 1 到 n 的 n 个整数及其所有可能的子集。

例如,当n=4时,矩阵如下:

1;0;0;0;1;1;1;0;0;0;1;1;1;0;1

0;1;0;0;1;0;0;1;1;0;1;1;0;1;1

0;0;1;0;0;1;0;1;0;1;1;0;1;1;1

0;0;0;1;0;0;1;0;1;1;0;1;1;1;1

其中第一列对应于 {1,2,3,4} 的子集 {1},第二列对应于 {1,2,3,4} 的子集 {2},第 5 列例如对应于子集 {1,2} {1,2,3,4} 等等。

我的想法是首先创建相应大小的全零矩阵,然后我不知道如何进行。请帮助我获得想法。

4

1 回答 1

2

itertools模块使这很容易。这是一种方法:

import itertools

def subset_matrix(n):
    A = [[0]*pow(2,n) for _ in range(n)]
    j = 0
    for k in range(n+1):
        for c in itertools.combinations(range(n),k):
            for i in c:
                A[i][j] = 1
            j += 1
    return A

#for example:

A = subset_matrix(4)
for row in A:
    print(row)

输出:

[0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1]
[0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1]
[0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1]
[0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1]
于 2020-05-15T18:03:10.550 回答