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

1 ビュー (過去 30 日間)
aweller3 2021 年 11 月 26 日
コメント済み: Matt J 2021 年 11 月 28 日
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
##### 1 件のコメント表示非表示 なし
Jeff Miller 2021 年 11 月 26 日
Check the answers here, especially the fileexchange function npermutek mentioned at the end.

サインインしてコメントする。

### 採用された回答

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 件のコメント表示非表示 1 件の古いコメント
Matt J 2021 年 11 月 28 日
Nothing in my solution forbids duplicates.

サインインしてコメントする。

### Community Treasure Hunt

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

Start Hunting!

Translated by