Столбец матрицы как операция и

Мой массив

[[1. 1. 0. 0. 1.]
 [0. 1. 0. 1. 0.]
 [0. 1. 1. 0. 0.]
 [1. 1. 0. 1. 0.]
 [1. 0. 1. 0. 0.]
 [0. 1. 1. 0. 0.]
 [1. 0. 1. 0. 0.]
 [1. 1. 1. 0. 1.]
 [1. 1. 1. 0. 0.]
 [6. 7. 6. 2. 2.]]

Я хочу взять нулевую строку и первую строку, чтобы выполнить операцию «И» и подсчитать общее количество нравится:

[[1. 1.] 1
 [0. 1.] 0
 [0. 1.] 0
 [1. 1.] 1
 [1. 0.] 0
 [0. 1.] 0
 [1. 0.] 0
 [1. 1.] 1
 [1. 1.]] 1

но я хочу обнулить строку и вторую строку, нулевую строку и третью строку, нулевую строку и четыре строки, первую строку и вторую строку, первую строку и третью строку ... продолжайте нравится :

 row[0]row[1] , row[0]row[2] , row[0]row[3] , row[0]row[4]
 row[1]row[2] , row[1]row[3] , row[1]row[4]
 row[2]row[3] , row[2]row[4]
 row[3]row[4]

Я беру код нулевой строки и второй строки:

q = []
first = [int(row[0] and row[1])for row in array[:-1]]
c = sum(first)
q.append(c)
print(c)

Как я могу сделать? Я использую Python3 и Numpy.

1
0
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, вам нужны все комбинации столбцов, вы можете использовать itertools.combinations() для получения комбинаций и пару вызовов zip(), чтобы получить то, что вы хотите:

In []:
[[int(all(r)) for r in zip(*p)] for p in it.combinations(zip(*a[:-1]), r=2)]

Out[]:
[[1, 0, 0, 1, 0, 0, 0, 1, 1],
 [0, 0, 0, 0, 1, 0, 1, 1, 1],
 [0, 0, 0, 1, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 1, 0],
 [0, 0, 1, 0, 0, 1, 0, 1, 1],
 [0, 1, 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, 0, 0, 0, 1, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0]]

Или, если вам нужно перенести результаты в столбцы:

In []:
list(zip(*[[int(all(r)) for r in zip(*p)] for p in it.combinations(zip(*a[:-1]), r=2)]))

Out[]:
[(1, 0, 0, 1, 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),
 (1, 0, 1, 0, 0, 1, 0, 0, 0, 0),
 (0, 1, 0, 0, 0, 0, 0, 0, 0, 0),
 (0, 0, 0, 0, 1, 0, 0, 0, 0, 0),
 (0, 1, 0, 0, 0, 0, 0, 0, 0, 0),
 (1, 1, 0, 1, 1, 0, 1, 0, 1, 0),
 (1, 1, 0, 0, 1, 0, 0, 0, 0, 0)]
Ответ принят как подходящий
[[int(m[k][i] and m[k][j])
  for k in range(len(m))
 ] for i, j in combinations(range(len(m[0])), 2)]

Если вы также хотите увидеть, какие столбцы были объединены оператором AND для каждого подрезультата:

{(i, j): [int(m[k][i] and m[k][j])
  for k in range(len(m))
 ] for i, j in combinations(range(len(m[0])), 2)}

Другие вопросы по теме