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
你可以将0
和2^(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));
我正在寻找一种简单的方法来获取二进制矩阵的所有组合。我已经尝试了函数 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
你可以将0
和2^(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));