building all such vectors?
2 ビュー (過去 30 日間)
古いコメントを表示
How to build all vector with A elements equal to 1, B elements equal to 2, and C elements equal to 3 ?
I'm looking for an algorithm or a function building all such vectors.
0 件のコメント
採用された回答
Roger Stafford
2013 年 8 月 7 日
This is a problem in combinations, not permutations, and can be performed using matlab's 'nchoosek' function. Note that the number of possible combinations in your problem is
(A+B+C)!/A!/B!/C! = (A+B+C)!/A!/(B+C)! * (B+C)!/B!/C!
The code:
p1 = nchoosek(1:A+B+C,B+C); % Choose B+C indices out of 1:A+B+C
p2 = nchoosek(1:B+C,C); % Choose C indices out of 1:B+C
m = size(p1,1);
n = size(p2,1);
V = ones(m*n,A+B+C); % Start with all 1's
for ix = 1:m
V((1:n)+n*(ix-1),p1(ix,:)) = 2; % Reset B+C of them to 2's
for jx = 1:n
V(jx+n*(ix-1),p1(ix,p2(jx,:))) = 3; % Of these, reset C to 3's
end
end
2 件のコメント
Roger Stafford
2013 年 8 月 8 日
編集済み: Jan
2013 年 8 月 8 日
I had forgotten that I previously answered an essentially equivalent question to this at the 'Answers' site:
I used a slightly different technique there which you might be interested in trying.
Jan
2013 年 8 月 8 日
@Roger: The similarity between the questions is impressive or surprising. I prefer the other implementation due to its simplicity.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Labeling, Segmentation, and Detection についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!