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

时间:2016-01-03 11:07:03

标签: matlab matrix binary permutation

我正在寻找一种简单的方法来获得二进制矩阵的所有组合。我已经尝试了函数Number.prototype.padDigit = function () { return (this < 10) ? '0' + this : this; } function CalculateTotal() { var t1 = "00.00"; var mins = 0; var hrs = 0; $('input.time').each(function () { t1 = t1.split('.'); var t2 = $(this).val().split('.'); console.log(Number(t1[1]) + Number(t2[1])) mins = Number(t1[1]) + Number(t2[1]); minhrs = Math.floor(parseInt(mins / 60)); hrs = Number(t1[0]) + Number(t2[0]) + minhrs; mins = mins % 60; t1 = hrs.padDigit() + '.' + mins.padDigit() console.log(t1); }); return t1; } $("#addTimes").on('click', function () { $('#gtot_st').val(CalculateTotal()); }); //Check for an input change on any one of the text boxes with a class of "time" $(".time").on('input', function() { $('#gtot_st').val(CalculateTotal()); }) ,但没有得到正确的结果。

我有例如填充1和-1的矩阵N x N.当N = 2时,将存在2 ^ 4种可能的1和-1组合,如

perms()

当我使用perms()时,我不会得到第一个矩阵。

我该如何解决?

3 个答案:

答案 0 :(得分:5)

您可以将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));

答案 1 :(得分:-1)

一个简单的黑客攻击如下:

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

...

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

答案 2 :(得分:-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