How do I produce all possible permutations of a vector, selecting a chosen number of elements?

조회 수: 10 (최근 30일)
Given some vector like a=[0:3] (but it doesn't have to be evenly spaced) I want to list all permutations (not combinations). I know perms can do this but it doesn't let you choose the number of elements you want.
I managed to do this choosing only 3 elements at a time using meshgrid. Here is my code for that:
%written in Octave
function C3 = ThreeNoteChordGen ()
%stores pitch classes 0 to 11
n=[0:11];
%initialize C3 as blank array;
C3=[];
[xx,yy,zz]=meshgrid(n,n,n);
[numRows, numCols, numPages] = size(zz);
for (countPage=1:numPages)
for (countCol=1:numCols)
newSegment=[zz(:,countCol,countPage), xx(:,countCol,countPage),yy(:,countCol,countPage)];
C3=[C3; newSegment];
endfor
endfor
endfunction
I'm having trouble adapting this method for choosing more elements at a time. I would appreciate any help. I'm very much a beginner programmer so I would rather you point me in the right direction rather than coding it for me (I probably won't understand your code);
Thank you

채택된 답변

Matt J
Matt J 2021년 11월 27일
편집: Matt J 2021년 11월 27일
a=[4,17,13,5,1,90];
n=3;
P=perms(1:n).';
b=nchoosek(a,n).' ;
out=reshape( b(P(:),:),n,[]).'
out = 120×3
13 17 4 13 4 17 17 13 4 17 4 13 4 13 17 4 17 13 5 17 4 5 4 17 17 5 4 17 4 5
  댓글 수: 2
aweller3
aweller3 2021년 11월 27일
Both of the solutions from Matt J and Jeff Miller work perfectly for that. Thank you. Is it possible to allow duplicates like [0 0 0;0 0 1;0 1 0]?

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Lighting, Transparency, and Shading에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by