Комбинации в питоне с разными элементами - PullRequest
0 голосов
/ 06 февраля 2019

Я испытываю трудности при расчете различных типов комбинаций.

Давайте объясним на примере, у меня есть этот массив, или это может быть фрейм данных, и я хочу, чтобы из него были разные комбинации некоторых столбцов.

Поскольку я затем умножу эту матрицу на комбинацию для суммирования чисел.

test = np.array ([[10,11,12,21,22,31,32,33],
                   [10,11,12,21,22,31,32,33],
                   [10,11,12,21,22,31,32,33],
                    [10,11,12,21,22,31,32,33],
                    [10,11,12,21,22,31,32,33],
                    [10,11,12,21,22,31,32,33],
                    [10,11,12,21,22,31,32,33]])

Возможные комбинации для первых трех столбцов: [1,0,0], [0,1,0], [0,0,1], поэтому мне нужно 10 или 11 или 12 следующих столбцов, 21 или 22, следовательно, комбинации [1,0], [0,1] И последние три столбца, 31,3 2,33, тогда это будет [1,0,0], [0,1,0], [0,0,1]

Итак, я получаю возможную комбинацию, используя эту функцию, которую я нашел в другойвопрос.

n=3
for i in range(2**n):
    s = bin(i)[2:]
    s = "0" * (n-len(s)) + s
    print (list(s))

Что дает мне:

['0', '0', '0']
['0', '0', '1']
['0', '1', '0']
['0', '1', '1']
['1', '0', '0']
['1', '0', '1']
['1', '1', '0']
['1', '1', '1']

Все возможные комбинации, включая нули.Хотя мне удалось удалить их.

Он рассчитывает больше, чем нужные мне комбинации, и я обнаружил, что удаляю слишком много комбинаций, которые мне не нужны.

Когда мне нужны только эти случаи:

[1,0,0,   1,0,   1,0,0]
[0,1,0,   1,0,   1,0,0]
[0,0,1,   1,0,   1,0,0]
[1,0,0,   0,1,   1,0,0]
[0,1,0,   0,1,   1,0,0]
[0,0,1,   0,0,   1,0,0]
 etc....

Мне нужно удалить много строк, которые не имеют отношения к 8 случаям, и удалить строки, где я нахожу более трех 1, и выбрать, где 1 расположены правильно и т. Д. ... неэффективно вообще,Я немного растерялся.

1 Ответ

0 голосов
/ 06 февраля 2019

Я действительно не понимаю логику этого примера, но решает ли это вашу проблему?

from itertools import product,permutations

a = set(permutations([0,0,1]))
b = set(permutations([0,1]))

comb = []
for t1,t2,t3 in product(a,b,a):
    comb.append([*t1,*t2,*t3])

print(comb)

# [[1, 0, 0, 0, 1, 1, 0, 0],
#  [1, 0, 0, 0, 1, 0, 1, 0],
#  [1, 0, 0, 0, 1, 0, 0, 1],
#  [1, 0, 0, 1, 0, 1, 0, 0],
#  [1, 0, 0, 1, 0, 0, 1, 0],
#  [1, 0, 0, 1, 0, 0, 0, 1],
#  [0, 1, 0, 0, 1, 1, 0, 0],
#  [0, 1, 0, 0, 1, 0, 1, 0],
#  [0, 1, 0, 0, 1, 0, 0, 1],
#  [0, 1, 0, 1, 0, 1, 0, 0],
#  [0, 1, 0, 1, 0, 0, 1, 0],
#  [0, 1, 0, 1, 0, 0, 0, 1],
#  [0, 0, 1, 0, 1, 1, 0, 0],
#  [0, 0, 1, 0, 1, 0, 1, 0],
#  [0, 0, 1, 0, 1, 0, 0, 1],
#  [0, 0, 1, 1, 0, 1, 0, 0],
#  [0, 0, 1, 1, 0, 0, 1, 0],
#  [0, 0, 1, 1, 0, 0, 0, 1]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...