How to Permute the array with specific number?
    3 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
I want to keep 1,2,6,7,9,10, they will not move 
I have this array
b=[1,5,2,8,6,11,7,9,3,10]
P=perms(b);
HOw to use perms for 3,5,8,11 among 6 numbers above?
0 commentaires
Réponse acceptée
  Stephen23
      
      
 le 29 Mai 2019
        >> b = [1,5,2,8,6,11,7,9,3,10];
>> idx = ~ismember(b,[1,2,6,7,9,10]);
>> mat = repmat(b,factorial(nnz(idx)),1);
>> mat(:,idx) = perms(b(idx))
mat =
    1   11    2    8    6    5    7    9    3   10
    1   11    2    8    6    3    7    9    5   10
    1   11    2    5    6    8    7    9    3   10
    1   11    2    5    6    3    7    9    8   10
    1   11    2    3    6    8    7    9    5   10
    1   11    2    3    6    5    7    9    8   10
    1    8    2   11    6    5    7    9    3   10
    1    8    2   11    6    3    7    9    5   10
    1    8    2    5    6   11    7    9    3   10
    1    8    2    5    6    3    7    9   11   10
    1    8    2    3    6   11    7    9    5   10
    1    8    2    3    6    5    7    9   11   10
    1    5    2   11    6    8    7    9    3   10
    1    5    2   11    6    3    7    9    8   10
    1    5    2    8    6   11    7    9    3   10
    1    5    2    8    6    3    7    9   11   10
    1    5    2    3    6   11    7    9    8   10
    1    5    2    3    6    8    7    9   11   10
    1    3    2   11    6    8    7    9    5   10
    1    3    2   11    6    5    7    9    8   10
    1    3    2    8    6   11    7    9    5   10
    1    3    2    8    6    5    7    9   11   10
    1    3    2    5    6   11    7    9    8   10
    1    3    2    5    6    8    7    9   11   10
6 commentaires
  Stephen23
      
      
 le 29 Mai 2019
				
      Modifié(e) : Stephen23
      
      
 le 29 Mai 2019
  
			Here is a simple but not-very-efficient solution (warning: generates all permutations and discards invalid ones) (note that 1 and 10 have been ignored to make the code simpler):
b = [5,2,8,6,11,7,9,3];
V = [2,6,7,9]; % fixed
P = perms(b);
[X,Y] = ismember(P.',V);
R = reshape(Y(X),[],size(P,1));
D = all(diff(R,1,1)>0);
Z = P(D,:)
Giving:
Z =
     3    11     8     2     6     7     9     5
     3    11     8     2     6     7     5     9
     3    11     8     2     6     5     7     9
     3    11     8     2     5     6     7     9
     3    11     8     5     2     6     7     9
     3    11     2     6     8     7     9     5
     3    11     2     6     8     7     5     9
     3    11     2     6     8     5     7     9
     3    11     2     6     7     8     9     5
  ... lots of lines here
     5     3     2    11     6     7     8     9
     5     3     2    11     6     7     9     8
     5     3     2    11     8     6     7     9
     5     3     2     6    11     8     7     9
     5     3     2     6    11     7     8     9
     5     3     2     6    11     7     9     8
     5     3     2     6     8    11     7     9
     5     3     2     6     8     7    11     9
     5     3     2     6     8     7     9    11
     5     3     2     6     7     8    11     9
     5     3     2     6     7     8     9    11
     5     3     2     6     7    11     8     9
     5     3     2     6     7    11     9     8
     5     3     2     6     7     9    11     8
     5     3     2     6     7     9     8    11
     5     3     2     8     6    11     7     9
     5     3     2     8     6     7    11     9
     5     3     2     8     6     7     9    11
     5     3     2     8    11     6     7     9
Plus de réponses (1)
  Jan
      
      
 le 28 Mai 2019
        
      Modifié(e) : Jan
      
      
 le 28 Mai 2019
  
      You did not mention how the output should look like. Perhaps:
b    = [1,5,2,8,6,11,7,9,3,10];
keep = [1,2,6,7,9,10];
move = ~ismember(b, keep);
P    = perms(b(move));
R    = repmat(b, size(P,1), 1);
R(:, move) = P
6 commentaires
  Jan
      
      
 le 29 Mai 2019
				@Hang Vu: I do not understand, what you mean. You solved the problem, but this is another one? Is the problem of your question solved or not?
"if the moving numbers move then you will see the keeping move..." - what does this mean?
Please explain exactly, what you want to achieve. 
Voir également
Catégories
				En savoir plus sur Creating and Concatenating Matrices 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!


