Who do I create a sequence of matrices?
조회 수: 4 (최근 30일)
이전 댓글 표시
Hello everybody!
I need to create a sequence of matrices of the following form. For example: From the input:
1 2 0
x = 0 0 0
0 0 0
I need to get:
1 0 0 1 1 0 1 2 0 0 1 0 0 2 0
y = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
That is, I need to get a "combinatoric" sequence of matrices from the one input. The size of the matrix can vary. Is there any suitable function for this? Thank you.
댓글 수: 11
채택된 답변
Matt Fig
2012년 11월 17일
편집: Matt Fig
2012년 11월 18일
This will do the job. Note that all of the matrices are there, but they are in a different order. You can figure out how to re-order them if you work on it. You need this file to make the code work as I have written it: NPERMUTEK.
Note that like most combinatorial problems, things can quickly get out of control with either many elements or a small number of large elements of x.
UPDATE: Simplified Code greatly
function H = combinatoricmat(x)
% help goes here...
L = [size(x) prod(x(x>0)+1)]; % Final array size.
H = npermutek(0:max(x(:)),numel(x));
H = reshape(H(all(bsxfun(@le,H,x(:).'),2),:).',L);
Now test it once it is saved on the MATLAB path:
>> x = [1 2 0;0 0 0;0 0 0];
>> combinatoricmat(x)
ans(:,:,1) =
0 0 0
0 0 0
0 0 0
ans(:,:,2) =
0 1 0
0 0 0
0 0 0
ans(:,:,3) =
0 2 0
0 0 0
0 0 0
ans(:,:,4) =
1 0 0
0 0 0
0 0 0
ans(:,:,5) =
1 1 0
0 0 0
0 0 0
ans(:,:,6) =
1 2 0
0 0 0
0 0 0
추가 답변 (1개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!