Using ngrid to create a matrix listing all combinations of values from row vectors

조회 수: 5 (최근 30일)
Hi, I have the following vectors
A= [1 2 3 4];
B= [1 2];
C= [1 2 3 6 7 8];
D= [1 3 6];
and I want to create a matrix 144x4 listing in each row 1x4 a possible combination of elements from the vectors above in the order A(i) B(j) C(h) D(k). I could use ndgrid, but I don't know how to create the final matrix listing in each row a specific combination of values.

채택된 답변

Andrei Bobrov
Andrei Bobrov 2013년 12월 9일
편집: Andrei Bobrov 2013년 12월 9일
A= [1 2 3 4];
B= [1 2];
C= [1 2 3 6 7 8];
D= [1 3 6];
CC = {A,B,C,D};
n = cellfun(@numel,CC);
n1 = cumsum(n);
i0 = fullfact(n);
idx = bsxfun(@plus,i0,[0, n1(1:end-1)]);
v = cat(2,CC{:});
out = v(idx);
ndgrid instead fullfact
k = cellfun(@(x)1:x,n,'un',0);
[i4,i3,i2,i1] = ndgrid(k(end:-1:1));
i0 = [i1(:),i2(:),i3(:),i4(:)];

추가 답변 (1개)

Ali H.
Ali H. 2014년 11월 7일
Vectors = {A,B,C,D};
Combinations = combvec(Vectors{:})';

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by