how to generate permutations of N numbers in K positions
    42 views (last 30 days)
  
       Show older comments
    
I want to generate all permutations of N numbers in K places, where K is less than N (nPk) in matlab, I've searched online and already existing questions but couldn't find a functions which generates such permutations without repitition. There are some functions which do this with repitation.
For example if I've a vector [1 2 3 4] my N is 4 and my K is 2, then I want 12 permutations using the formula N!/(N-K)1 = 4!/(4-2)! = 12
[1,2]
[1,3]
[1,4]
[2,1]
[2,3]
[2,4]
[3,1]
[3,2]
[3,3]
[4,1]
[4,2]
[4,3]
These are the permutations which I want to generate. Kindly suggest me the solution.
0 Comments
Accepted Answer
  Stephen23
      
      
 on 19 Feb 2019
        
      Edited: Stephen23
      
      
 on 19 Feb 2019
  
      Download Loginatorist's powerful FEX submission combinator:
and use it like this:
>> sortrows(combinator(4,2,'p'))
ans =
     1     2
     1     3
     1     4
     2     1
     2     3
     2     4
     3     1
     3     2
     3     4
     4     1
     4     2
     4     3
If you want to apply this to a vector that is not 1:N, simply use the output of combinator as indices into your vector.
0 Comments
More Answers (2)
  Bruno Luong
      
      
 on 22 Mar 2021
        
      Edited: Bruno Luong
      
      
 on 22 Mar 2021
  
      No loop, no extrenal file needed
N=5; K=3;
P=nchoosek(1:N,K);
P=reshape(P(:,perms(1:K)),[],K)
You might further sort the permutation so that the order is easily to follow
P = sortrows(P)
4 Comments
  Walter Roberson
      
      
 on 24 Nov 2022
				If you have an array P that is 2 or more dimensions (not a vector!), and you use P(A,B) where A and B might be arrays, then the result is the same as if you had used P(A(:), B(:)) -- so P(A(1),B(1)), P(A(2),B(1)), P(A(3),B(1)) up to P(A(end),B(1)) is the first column, then the second column would be P(A(1),B(2)), P(A(2),B(2)), P(A(3),B(2)) to P(A(end),B(2)), and so on -- all combinations of the elements in A with all of the elements in B, same as if A and B had been vectors rather than 2D arrays.
The shape of the result might be different if P is a vector instead of a 2D array.
See Also
Categories
				Find more on Matrix Indexing in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!