我正在尋找一種簡單的方法來獲得二元矩陣的所有組合。我已經嘗試了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