Matlab:二进制矩阵的所有组合

Matlab: All combinations of binary matrix

我正在寻找一种简单的方法来获取二进制矩阵的所有组合。我已经尝试了函数 perms() 但没有得到正确的结果。

例如,我有一个用 1 和 -1 填充的矩阵 N x N。当 N=2 时,1 和 -1 将有 2^4 种可能的组合,例如

       (1 1)          (1  1)          (-1 -1)
M(1) = (1 1) , M(2) = (1 -1) , M(3) = ( 1  1) and so on...

当我使用 perms() 时,我没有得到例如第一个矩阵。

我该如何解决?

一个简单的 hack 如下:

v = [1 -1 1 -1];
P = perms(v);
for ii = 1:size(P,1)
    A = reshape(P(ii,:),2,2)
end

这导致:

A =

    -1    -1
     1     1

...

结果中仍然有一些相同的矩阵应该被删除。

我想我找到了解决问题的方法

L = 2;
N = L^2;
v = cell(N,1);
for k = 1:N
    v{k} = linspace(-1,1,2);
end

ne=numel(v);
x=cell(ne,1);
[x{1:ne,1}]=ndgrid(v{end:-1:1});
p=reshape(cat(ne+1,x{:}),[],ne);

F = cell(length(p),1);
for k=1:length(p)
    F{k} = reshape(p(k,:),L,L);
end

你可以将02^(N^2)-1之间的所有数字表示为二进制数,然后整形:

N = 2;
v = (1:2^(N^2))-1;
A = dec2bin(v)' - '0'; %'// Or use: decimalToBinaryVector(v)';
A(A==0) = -1;
A = reshape(A,N,N,2^(N^2));