How do I create a vector combinations in pairs
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
How do I create a vector combinations in pairs ,with no repeated elements ,for example :
A(1,2,3,4)
1,2
1,3
1,4
2,1
2,3
2,4
3,1
3,2
3,4
4,1
4,2
4,3
I tried to use some commands like : perms And combnk , thanks in advanced
0 commentaires
Réponse acceptée
Azzi Abdelmalek
le 18 Sep 2013
Modifié(e) : Azzi Abdelmalek
le 18 Sep 2013
a=fliplr(fullfact([4 4]))
a(~diff(a')',:)=[]
or
[ii,jj]=ndgrid(1:4,1:4);
a=[jj(:) ii(:)];
a(~(a(:,1)-a(:,2)),:)=[]
2 commentaires
Azzi Abdelmalek
le 19 Sep 2013
n=4
m=3 % number of combinations
a=fliplr(fullfact(ones(1,m)*n));
b=sort(a,2);
idx=any(~diff(b')',2);
a(idx,:)=[]
Plus de réponses (5)
Roger Stafford
le 19 Sep 2013
What you are asking for in this comment are known as the partial permutations. I don't know if matlab has such a routine but you can use 'nchoosek' and 'perms' to create one. Let A be a row vector of n elements and let the number of these to be selected in each permutation be called r.
c = nchoosek(A,r)';
ncr = size(c,2);
p = perms([1:r]);
pr = size(p,1);
p = reshape(p',1,[]);
B = zeros(ncr*pr,r);
for k = 1:ncr
B((k-1)*pr+1:k*pr,:) = reshape(c(p,k),r,[])';
end
B will be the desired list of partial permutations.
0 commentaires
Roger Stafford
le 19 Sep 2013
Here is a more compact way of using 'nchoosek' and 'perms'.
c = nchoosek(A,r)';
B = reshape(c(perms(1:r)',:),r,[])';
where A, r, and B are as before.
0 commentaires
Andrei Bobrov
le 19 Sep 2013
Modifié(e) : Andrei Bobrov
le 19 Sep 2013
d = fullfact([4 4]);
out = d(diff(d,[],2)~=0,:);
and
A = [8 2 9 6 1];
n = 3;
ix = fullfact(ones(1,n)*numel(A));
out = A(ix(all(diff(sort(ix,2),[],2),2),:));
and using the ideas by Roger Stafford (they very nice)
c = nchoosek(A,r)';
p = perms([1:r]);
s = size(c);
c(reshape(bsxfun(@plus,p',reshape((0:s(2)-1)*s(1),1,1,[])),s(1),[])');
0 commentaires
Jos (10584)
le 19 Sep 2013
The simplest way is to create all N*N combinations and weed out the N ones that have the same value.
N = 4 ;
A = 1:N ;
[b2,b1] = ndgrid(A) ; % generalization
q = b1~=b2 ;
% q = ~eye(N) ; % they are all on the diagonal
B = [b1(q) b2(q)]
0 commentaires
Voir également
Catégories
En savoir plus sur Graph and Network Algorithms dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!