Xor несколько массивов в Python - PullRequest
0 голосов
/ 02 июня 2018

Я хотел бы объединить несколько массивов в матрице для получения массива all 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)]

Если я переписать массивы 3 и 4, я получу массивы всех нулей или смогу перебрать массивы 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

Проблемазаключается в том, что этот метод сравнивает только пары массивов.

Я ищу любые комбинации массивов, которые добиваются цели.

1 Ответ

0 голосов
/ 02 июня 2018

Находит все комбинации строк со значением 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]))
...