All possible combinations of 2 vectors.
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi everyone.
I have one vector and one number. For example [1 3 5] and 0.
How do I generate all possible combinations? Like this:
0 3 5
1 0 5
1 3 0
0 0 5
0 3 0
1 0 0
0 0 0
2 commentaires
Matt Fig
le 22 Nov 2012
Why is the last row all zeros? It looks like the rule is: take at least one element from each vector, with repetition allowed only for the shorter vector. But then the last row breaks this. So what is the rule?
Réponse acceptée
Matt Fig
le 22 Nov 2012
Modifié(e) : Matt Fig
le 23 Nov 2012
Here is a solution:
function H = mycomb(V)
% Help
L = length(V);
H = cell(1,L);
for ii = 1:L-1
C = nchoosek(1:L,L-ii);
R = cumsum(ones(size(C)));
M = max(R(:,1));
H{ii} = zeros(M,L);
H{ii}(R+(C-1)*M) = V(C);
end
H{L} = zeros(1,L);
H = vertcat(H{:});
Now try it out from the command line:
>> mycomb([4 5 6])
ans =
4 5 0
4 0 6
0 5 6
4 0 0
0 5 0
0 0 6
0 0 0
>> mycomb([4 5 6 7])
ans =
4 5 6 0
4 5 0 7
4 0 6 7
0 5 6 7
4 5 0 0
4 0 6 0
4 0 0 7
0 5 6 0
0 5 0 7
0 0 6 7
4 0 0 0
0 5 0 0
0 0 6 0
0 0 0 7
0 0 0 0
0 commentaires
Plus de réponses (3)
Andrei Bobrov
le 22 Nov 2012
Modifié(e) : Andrei Bobrov
le 22 Nov 2012
variant
t = [1 3 5];
ii = perms([t, zeros(size(t))]);
out = unique(sort(t(:,1:numel(t)),2),'rows');
or
t = [1 3 5];
out = [];
n = numel(t);
for jj = 1:n
k = nchoosek(t,n - jj);
out = [out;[zeros(size(k,1),jj),k]];
end
or
k = ones(1,numel(t)) * 2.^(numel(t)-1:-1:0)';
out = bsxfun(@times,t,dec2bin(0:k - 1,numel(t))-'0');
Azzi Abdelmalek
le 22 Nov 2012
Modifié(e) : Azzi Abdelmalek
le 23 Nov 2012
save this function
function y=arrangement(v,n)
m=length(v);
y=zeros(m^n,n);
for k = 1:n
y(:,k) = repmat(reshape(repmat(v,m^(n-k),1),m*m^(n-k),1),m^(k-1),1);
end
then type
x=arrangement([1 3 5 0],3)
out=x(~all(x,2),:)
If you don't need repetition add
s=arrayfun(@(t) sort(out(t,:)),(1:size(out,1))','un',0)
out1=unique(cell2mat(s),'rows')
0 commentaires
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!