Для генерации комбинаций я использую библиотеку numpy. В Интернете я нашел следующий код:
Код: Выделить всё
np.array(np.meshgrid(*[[1, 0] for x in range(size)])).T.reshape(-1, size)
if size = 3
[1 1 1]
[1 0 1]
[0 1 1]
[0 0 1]
[1 1 0]
[1 0 0]
[0 1 0]
[0 0 0]
Мне нужно сгенерировать комбинации таким образом, чтобы удалить все цикличные копии, т.е.:
[1 1 1]
[1 0 1]
[0 1 1] потому что [1 0 1] и [1 1 0] — циклические перемещения
[0 0 1]
[1 1 0]
[1 0 0]
[0 1 0]
[0 0 0]
Необходимо написать функцию, которая будет генерировать все разрешенные комбинации любой длины. от 3 до 1000 элементов. Другой вопрос, как его сохранить))
Я создал какой-то действительно ужасный код, за который мне стыдно, но он вроде работает.
Код: Выделить всё
def gen_matrix(size):
return np.array(np.meshgrid(*[[1, 0] for x in range(0, size)])).T.reshape(-1, size)
def build_matrix(size_row):
a = gen_matrix(size_row)
kill = True
while kill:
kill = False
for i in a:
if kill:
break
for j in range(1, size_row):
b = np.roll(i, j)
if np.array_equal(i, b):
continue
k = np.where((a == b).all(axis=1))
if np.size(k) > 0:
a = np.delete(a, k[0], 0)
kill = True
return a
result:
[1 1 1 1 1]
[1 0 1 1 1]
[0 0 1 1 1]
[0 1 0 1 1]
[0 0 0 1 1]
[0 0 1 0 1]
[0 0 0 0 1]
[0 0 0 0 0]
на самом деле мне нужно сгенерировать все комбинации двоичной последовательности, но удалить все циклические копии.
2^12 = всего 4096 вариантов
если из них удалить циклические копии, количество вариантов будет 352.
Подробнее здесь: https://stackoverflow.com/questions/730 ... -rotations
Мобильная версия