How do I create a vector combinations in pairs ,with no repeated elements ,for example :
I tried to use some commands like : perms And combnk , thanks in advanced
No products are associated with this question.
You find many solutions in the FileExchange, e.g.:
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.
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.
d = fullfact([4 4]); out = d(diff(d,,2)~=0,:);
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),)');
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)]