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에서 Surface and Mesh Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!