我正在尝试使用二进制集创建上三角形矩阵:
我正在创建所有可能的n x n二进制矩阵,只有上三角形值(不包括对角线)。对于n = 3的情况,我可以做一个for循环。这是3 × 3矩阵2^3 = 8个排列。所以是8个矩阵。当n = 4,5,6,…我得到一个形状不匹配错误。不知道为什么for循环不会迭代。
见下面的代码示例:
n = 3
# Now we need to make permutation of binary upper_count tuples
# This will give 2^n sets of n binary values.
from itertools import *
t1 = list(product([0,1],repeat= n))
print(t1)
print('n')
# Now we create 2^n matrices of size nxn:
for i in t1:
m1 = np.zeros((n,n))
indices = np.triu_indices_from(m1,1)
upper = m1[indices]
m1[indices] = i
print(m1)
print('n')
给出以下期望的输出:
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
[[0. 0. 0.]
[0. 0. 1.]
[0. 0. 0.]]
[[0. 0. 1.]
[0. 0. 0.]
[0. 0. 0.]]
[[0. 0. 1.]
[0. 0. 1.]
[0. 0. 0.]]
[[0. 1. 0.]
[0. 0. 0.]
[0. 0. 0.]]
[[0. 1. 0.]
[0. 0. 1.]
[0. 0. 0.]]
[[0. 1. 1.]
[0. 0. 0.]
[0. 0. 0.]]
[[0. 1. 1.]
[0. 0. 1.]
[0. 0. 0.]]
For n = 4:
我得到以下错误。我错过了什么?
[(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 1, 0), (0, 0, 1, 1), (0, 1, 0, 0), (0, 1, 0, 1), (0, 1, 1, 0), (0, 1, 1, 1), (1, 0, 0, 0), (1, 0, 0, 1), (1, 0, 1, 0), (1, 0, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0), (1, 1, 1, 1)]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-68-75f42bce2989> in <cell line: 8>()
12 upper = m1[indices]
13
---> 14 m1[indices] = i
15 print(m1)
16 print('n')
ValueError: shape mismatch: value array of shape (4,) could not be broadcast to indexing result of shape (6,)
我的t1错了。我数错了。
from itertools import *
size_n = (n*(n-1))/2
size_n = int(size_n)
t1 = list(product([0,1],repeat= size_n))
更新代码:
n = 4
# Now we need to make permutation of binary upper_count tuples
from itertools import *
size_n = (n*(n-1))/2
size_n = int(size_n)
t1 = list(product([0,1],repeat= size_n))
print(t1)
print('n')
for i in t1:
print(i)
m1 = np.zeros((n,n))
indices = np.triu_indices_from(m1,1)
print('n')
# print(m1)
upper = m1[indices] # error here.
# print(upper)
m1[indices] = i
print(m1)
print('n')
预期结果
[(0, 0, 0, 0, 0, 0), (0, 0, 0, 0, 0, 1), (0, 0, 0, 0, 1, 0), (0, 0, 0, 0, 1, 1), (0, 0, 0, 1, 0, 0), (0, 0, 0, 1, 0, 1), (0, 0, 0, 1, 1, 0), (0, 0, 0, 1, 1, 1), (0, 0, 1, 0, 0, 0), (0, 0, 1, 0, 0, 1), (0, 0, 1, 0, 1, 0), (0, 0, 1, 0, 1, 1), (0, 0, 1, 1, 0, 0), (0, 0, 1, 1, 0, 1), (0, 0, 1, 1, 1, 0), (0, 0, 1, 1, 1, 1), (0, 1, 0, 0, 0, 0), (0, 1, 0, 0, 0, 1), (0, 1, 0, 0, 1, 0), (0, 1, 0, 0, 1, 1), (0, 1, 0, 1, 0, 0), (0, 1, 0, 1, 0, 1), (0, 1, 0, 1, 1, 0), (0, 1, 0, 1, 1, 1), (0, 1, 1, 0, 0, 0), (0, 1, 1, 0, 0, 1), (0, 1, 1, 0, 1, 0), (0, 1, 1, 0, 1, 1), (0, 1, 1, 1, 0, 0), (0, 1, 1, 1, 0, 1), (0, 1, 1, 1, 1, 0), (0, 1, 1, 1, 1, 1), (1, 0, 0, 0, 0, 0), (1, 0, 0, 0, 0, 1), (1, 0, 0, 0, 1, 0), (1, 0, 0, 0, 1, 1), (1, 0, 0, 1, 0, 0), (1, 0, 0, 1, 0, 1), (1, 0, 0, 1, 1, 0), (1, 0, 0, 1, 1, 1), (1, 0, 1, 0, 0, 0), (1, 0, 1, 0, 0, 1), (1, 0, 1, 0, 1, 0), (1, 0, 1, 0, 1, 1), (1, 0, 1, 1, 0, 0), (1, 0, 1, 1, 0, 1), (1, 0, 1, 1, 1, 0), (1, 0, 1, 1, 1, 1), (1, 1, 0, 0, 0, 0), (1, 1, 0, 0, 0, 1), (1, 1, 0, 0, 1, 0), (1, 1, 0, 0, 1, 1), (1, 1, 0, 1, 0, 0), (1, 1, 0, 1, 0, 1), (1, 1, 0, 1, 1, 0), (1, 1, 0, 1, 1, 1), (1, 1, 1, 0, 0, 0), (1, 1, 1, 0, 0, 1), (1, 1, 1, 0, 1, 0), (1, 1, 1, 0, 1, 1), (1, 1, 1, 1, 0, 0), (1, 1, 1, 1, 0, 1), (1, 1, 1, 1, 1, 0), (1, 1, 1, 1, 1, 1)]
(0, 0, 0, 0, 0, 0)
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 0, 0, 0, 0, 1)
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 0, 0, 0, 1, 0)
[[0. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 0, 0, 0, 1, 1)
[[0. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 0, 0, 1, 0, 0)
[[0. 0. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 0, 0, 1, 0, 1)
[[0. 0. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 0, 0, 1, 1, 0)
[[0. 0. 0. 0.]
[0. 0. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 0, 0, 1, 1, 1)
[[0. 0. 0. 0.]
[0. 0. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 0, 1, 0, 0, 0)
[[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 0, 1, 0, 0, 1)
[[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 0, 1, 0, 1, 0)
[[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 0, 1, 0, 1, 1)
[[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 0, 1, 1, 0, 0)
[[0. 0. 0. 1.]
[0. 0. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 0, 1, 1, 0, 1)
[[0. 0. 0. 1.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 0, 1, 1, 1, 0)
[[0. 0. 0. 1.]
[0. 0. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 0, 1, 1, 1, 1)
[[0. 0. 0. 1.]
[0. 0. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 1, 0, 0, 0, 0)
[[0. 0. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 1, 0, 0, 0, 1)
[[0. 0. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 1, 0, 0, 1, 0)
[[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 1, 0, 0, 1, 1)
[[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 1, 0, 1, 0, 0)
[[0. 0. 1. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 1, 0, 1, 0, 1)
[[0. 0. 1. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 1, 0, 1, 1, 0)
[[0. 0. 1. 0.]
[0. 0. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 1, 0, 1, 1, 1)
[[0. 0. 1. 0.]
[0. 0. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 1, 1, 0, 0, 0)
[[0. 0. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 1, 1, 0, 0, 1)
[[0. 0. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 1, 1, 0, 1, 0)
[[0. 0. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 1, 1, 0, 1, 1)
[[0. 0. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 1, 1, 1, 0, 0)
[[0. 0. 1. 1.]
[0. 0. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 1, 1, 1, 0, 1)
[[0. 0. 1. 1.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(0, 1, 1, 1, 1, 0)
[[0. 0. 1. 1.]
[0. 0. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(0, 1, 1, 1, 1, 1)
[[0. 0. 1. 1.]
[0. 0. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 0, 0, 0, 0, 0)
[[0. 1. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 0, 0, 0, 0, 1)
[[0. 1. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 0, 0, 0, 1, 0)
[[0. 1. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 0, 0, 0, 1, 1)
[[0. 1. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 0, 0, 1, 0, 0)
[[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 0, 0, 1, 0, 1)
[[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 0, 0, 1, 1, 0)
[[0. 1. 0. 0.]
[0. 0. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 0, 0, 1, 1, 1)
[[0. 1. 0. 0.]
[0. 0. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 0, 1, 0, 0, 0)
[[0. 1. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 0, 1, 0, 0, 1)
[[0. 1. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 0, 1, 0, 1, 0)
[[0. 1. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 0, 1, 0, 1, 1)
[[0. 1. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 0, 1, 1, 0, 0)
[[0. 1. 0. 1.]
[0. 0. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 0, 1, 1, 0, 1)
[[0. 1. 0. 1.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 0, 1, 1, 1, 0)
[[0. 1. 0. 1.]
[0. 0. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 0, 1, 1, 1, 1)
[[0. 1. 0. 1.]
[0. 0. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 1, 0, 0, 0, 0)
[[0. 1. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 1, 0, 0, 0, 1)
[[0. 1. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 1, 0, 0, 1, 0)
[[0. 1. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 1, 0, 0, 1, 1)
[[0. 1. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 1, 0, 1, 0, 0)
[[0. 1. 1. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 1, 0, 1, 0, 1)
[[0. 1. 1. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 1, 0, 1, 1, 0)
[[0. 1. 1. 0.]
[0. 0. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 1, 0, 1, 1, 1)
[[0. 1. 1. 0.]
[0. 0. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 1, 1, 0, 0, 0)
[[0. 1. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 1, 1, 0, 0, 1)
[[0. 1. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 1, 1, 0, 1, 0)
[[0. 1. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 1, 1, 0, 1, 1)
[[0. 1. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 1, 1, 1, 0, 0)
[[0. 1. 1. 1.]
[0. 0. 1. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 1, 1, 1, 0, 1)
[[0. 1. 1. 1.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
(1, 1, 1, 1, 1, 0)
[[0. 1. 1. 1.]
[0. 0. 1. 1.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
(1, 1, 1, 1, 1, 1)
[[0. 1. 1. 1.]
[0. 0. 1. 1.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]