我想知道存在多少个平方二进制矩阵,条件是它们每行和每列有两个,而且主对角线的元素为零。 我想创建一个程序,给定矩阵的大小,可以计算出满足这些条件的数量。
这是我目前一直在做的事情,但是没有得出正确的计算结果。在3x3矩阵中,我有3种可能性,而只有1种。我认为同一矩阵要被计数多次。 我该怎么做? 谢谢
import numpy as np
def funcion(n):
total = 0
for i in range(n):
a = np.random.randint(0, 2, (n, n))
while a[i].sum() != 2 or a[:, i].sum() != 2 or a[i][i] != 0:
a = np.random.randint(0, 2, (n, n))
if a[i].sum() == 2 and a[:, i].sum() == 2 and a[i][i] == 0:
total = total + 1
print(total)
return total
答案 0 :(得分:0)
随机是正确的-正如所评论的,这是一个数学问题:
nums = re.findall(r'\d{4}[-_]?\d{2}', 'Total revenue for 2016-03 is 3000 €')
# nums = ['2016-03']
nums = [num.replace('-', '').replace('_', '') for num in nums]
# nums = ['201603']
答案 1 :(得分:0)
这是一个非常直观的解决方案,您甚至可以打印出矩阵行并亲自查看。 代码的第一部分设置矩阵的规范。 这里的问题是将[1,1,0]或[1,1,1]视为乐高积木,以构建矩阵。 然后,您可以尝试使用此块的所有可能组合来填充矩阵, 始终在对角线处留下0的空间。
在注释行中,您可以验证一些行打印,以了解我们在做什么以及为什么。 唯一特殊的情况是大小为3的矩阵,因为它与“乐高积木”的大小相同,这意味着 变量“ x”为0,由于对角线,其位置固定。 结果是howMany中的值。
import itertools
size = 4 #square matrix (mandatory diagonal case)
binary_data = [1,1,'x'] #'x' can be either '0' or '1'
changePos = (size - 1) #1 is 0 fixed
if size > 3 :
comb = list(itertools.permutations(binary_data,changePos))
rowsX = [list(i) for i in comb] #convert tuple into lists
#[[1, 1, 'x'], [1, 'x', 1], [1, 1, 'x'], [1, 'x', 1], ['x', 1, 1], ['x', 1, 1]]
# for 0
rows0 = [[0 if y == 'x' else y for y in x] for x in rowsX]
#[[1, 1, 0], [1, 0, 1], [1, 1, 0], [1, 0, 1], [0, 1, 1], [0, 1, 1]]
# for 1
rows1 = [[1 if y == 'x' else y for y in x] for x in rowsX]
#[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
rows = []
# all possible combinations, without repetition
for row0 in rows0:
if row0 not in rows:
rows.append(row0)
for row1 in rows1:
if row1 not in rows:
rows.append(row1)
#[[1, 1, 0], [1, 1, 1], [1, 0, 1], [0, 1, 1]]
# 1st row can be [0,1,1,0] or [0,1,1,1] or [0,1,0,1] or [0,0,1,1]
# 2nd row can be [1,0,1,0], [1,0,1,1], [1,0,0,1], [0,0,1,1]]
howMany = len(rows)**size
elif size == 3
howMany = 1 #only one possible matrix
"""
0,1,1
1,0,1
1,1,0
"""
else: # < 3
print('It doesn't comply the matrix specifications' )