我想在矩阵中组合多个数组以实现全0数组
(0,0,0,0,0)
例如:
我有这个矩阵,其中array [0]是每个数组的索引:
[0,(0,1,0,1,0)]
[1,(0,1,0,0,0)]
[2,(0,0,1,1,0)]
[3,(0,0,1,0,0)]
[4,(0,0,1,0,0)]
如果我xor数组3和4我得到一个全零数组或者我可以xor数组0,1,2和4.
我不知道python中是否存在任何库来计算这些东西。我一直在寻找它。
任何想法怎么做?
我尝试过numpy库并尝试使用xor方法
for i in range(len(MODS)):
num = []
for j in range(len(MODS[i][1])):
if i+1 < len(MODS):
if xor(MODS[i][1][j],MODS[i+1][1][j]) == 0:
num.append(0)
continue
else:
break
else:
break
问题是此方法仅比较数组对。
我正在寻找可以解决问题的任何阵列组合。
答案 0 :(得分:0)
这会找到xor
值的所有行组合,结果为零(False
)。
要查找所有行组合,请使用itertools.combinations
。
import numpy as np
from itertools import combinations
A = np.array([[0,1,0,1,0],
[0,1,0,0,0],
[0,0,1,1,0],
[0,0,1,0,0],
[0,0,1,0,0]])
print('All combinations of rows with xor resulting in zero: ')
for i in range(1, len(A)+1):
for x in combinations(A, i):
if not np.logical_xor.reduce(x).any():
print(x)
# All combinations of rows with xor resulting in zero:
# (array([0, 0, 1, 0, 0]), array([0, 0, 1, 0, 0]))
# (array([0, 1, 0, 1, 0]), array([0, 1, 0, 0, 0]), array([0, 0, 1, 1, 0]), array([0, 0, 1, 0, 0]))
# (array([0, 1, 0, 1, 0]), array([0, 1, 0, 0, 0]), array([0, 0, 1, 1, 0]), array([0, 0, 1, 0, 0]))