我正在寻找一种简单的方法来获得二元矩阵的所有组合。我已经尝试了perms()
功能,但没有得到正确的结果。我有例如矩阵N×N填充1和-1。与N = 2当我使用烫发()我没有得到例如第一矩阵将有2^4 1和可能的组合-1等Matlab:二元矩阵的所有组合
(1 1) (1 1) (-1 -1)
M(1) = (1 1) , M(2) = (1 -1) , M(3) = (1 1) and so on...
。
我该如何解决这个问题?
我正在寻找一种简单的方法来获得二元矩阵的所有组合。我已经尝试了perms()
功能,但没有得到正确的结果。我有例如矩阵N×N填充1和-1。与N = 2当我使用烫发()我没有得到例如第一矩阵将有2^4 1和可能的组合-1等Matlab:二元矩阵的所有组合
(1 1) (1 1) (-1 -1)
M(1) = (1 1) , M(2) = (1 -1) , M(3) = (1 1) and so on...
。
我该如何解决这个问题?
可以代表所有的数字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));
我认为我找到了一个解决我的问题
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
为什么downvote?如果我错了,我想知道为什么 –
对我来说似乎很好,除了第一行的拼写错误('2^N-1'而不是'2 ^N²-1')。另外我会指出,这种方法并不强制你将所有这些组合存储在内存中,因为它可以在矩阵和“0:2 ^N²-1”之间建立1:1的对应关系,这意味着如果你只需要例如,随机获得这些矩阵之一,您可以选择一个数字,然后应用等值 – BillBokeey
同样发生在我身上!我们在这里学习还是打架? – NKN