为了在sage(一个基于python的编译器)中编程Hamming cod,我需要创建一个矩阵,其中每一列都是一个数字的二进制表示
假设Hamming(3)矩阵应该是这样的
0 0 0 1 1 1 1
0 1 1 0 0 1 1
1 0 1 0 1 0 1
它是从1到7的数字的二进制表示。
所以我现在所做的就是把任何给定的数字转换成它的二进制表示:
我做了一个小函数,它有两个值n和r
在r位上重复n
binrep(n,r)
x=n
L=[]
LL=[]
while (n>0):
a=int(float(n%2))
L.append(a)
n=(n-a)/2
while (len(L)<r):
L.append(0)
#print(L)
LL=L[::-1]
return LL
所以现在我想把我所有的东西都收集起来,做成一个像上面那个那样的大矩阵
最佳答案
您只需将所有这些二进制表示转换为整数列表,将它们收集到列表列表中,最后transpose该列表列表才能获得所需的输出。
n = 3
binary = []
for i in range(1, 2**n):
s = binrep(i, n)
binary.append(map(int, s))
matrix = zip(*binary)
或一行:
matrix = zip(*(map(int, binrep(i, n)) for i in range(1, 2**n)))
结果是
[(0, 0, 0, 1, 1, 1, 1),
(0, 1, 1, 0, 0, 1, 1),
(1, 0, 1, 0, 1, 0, 1)]
还要注意,还有其他方法可以convert numbers to binary,例如使用
str.format
:def binrep(n,r):
return "{0:0{1}b}".format(n, r)
关于python - 在python中创建数字的二进制表示形式的矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28111051/