Как заполнить двоичные матрицы всеми комбинациями?
Я хочу иметь 2 ^ n матриц со всеми комбинациями 0 и 1 в них. Например, для n = 6 (n = # строки x # столбцы)array{1}=[0 0 0; 0 0 0]
,array{2}=[0 0 0; 0 0 1]
...array{64}=[1 1 1;1 1 1]
, Я использую MATLAB, и я столкнулся сcombn.m
(M = COMBN (V, N) возвращает все комбинации из N элементов элементов вектора V. M имеет размер (длина (V). ^ N) -by-N.),dec2bin()
но я не могу понять это совершенно правильно. Другая моя идея состояла в том, чтобы создать большую матрицу, а затем разбить ее на 2 ^ n матриц. Например, для n = 6 (2 x 3) я сделал этоM=combn([0 1],3)
что дает мне:
M =
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Затем используйте этоM
чтобы создать большую матрицу, как этоM2=combn(M,2)
, но это дает неправильные результаты. Тем не менее, если я конкатенации M строки, как это:
M=combn([000;010;100;001;110;011;101;111],2)'
Я получаю что-то ближе к тому, что я ожидаю, т.е.
M =
Columns 1 through 21
0 0 0 0 0 0 0 0 10 10 10 10 10 10 10 10 100 100 100 100 100
0 10 100 1 110 11 101 111 0 10 100 1 110 11 101 111 0 10 100 1 110
Columns 22 through 42
100 100 100 1 1 1 1 1 1 1 1 110 110 110 110 110 110 110 110 11 11
11 101 111 0 10 100 1 110 11 101 111 0 10 100 1 110 11 101 111 0 10
Columns 43 through 63
11 11 11 11 11 11 101 101 101 101 101 101 101 101 111 111 111 111 111 111 111
100 1 110 11 101 111 0 10 100 1 110 11 101 111 0 10 100 1 110 11 101
Column 64
111
111
где я могу получить каждый столбец и преобразовать его отдельно в 64 матрицы. Так, например, столбец 1 будет преобразован из[0;0]
в[0 0 0;0 0 0]
и т.д. Тем не менее, я считаю, что это гораздо более простая проблема, которую можно решить за меньшее время, элегантно.