Create a multidimensional Grid

5 views (last 30 days)
Fab
Fab on 30 May 2021
Edited: Walter Roberson on 30 May 2021
Hi,
i try to create a multidimensional grid with these scalar values but i cannot wrap my head around how the code would look like if i use more than 2 or 3 Factors (I obviously don't want to make for each possible number of Factors an extra
if isequal(length(Factors),2), if isequal(length(Factors),3),if isequal(length(Factors),4),if isequal(length(Factors),5)
)
clear all;
clc;
FactorGrid = [];
%Three differend Factors, each Factor has 4 different possible values(each Factor has to have the same amount of different possible values )
Factors{1}= [1,2,3,4];
Factors{2}= [55,66,77,88];
Factors{3}= [101,202,303,404];
%For using 2 Factors
if isequal(length(Factors),2)
for k = 1:length(Factors{1})
for l = 1:length(Factors{2})
FactorGrid{end+1,1} = [Factors{1}(k),Factors{2}(l)];
end
end
end
%For using 3 Factors
if isequal(length(Factors),3)
for k = 1:length(Factors{1})
for l = 1:length(Factors{2})
for m = 1:length(Factors{3})
FactorGrid{end+1,1} = [Factors{1}(k),Factors{2}(l),Factors{3}(m)];
end
end
end
end
I tried to work with
perms()
but that didn't work either.
The grid should have the size of possible values^number of Factors, so in this case 4^3.
Can you help me out?

Accepted Answer

Fab
Fab on 30 May 2021
Ok thanks, this does the job for me:
A= [1, 2, 3, 4]';
B= [55, 66, 77, 88]';
C= [101, 202, 303, 404]';
ma=size(A,1);
mb=size(B,1);
mc=size(C,1);
[a,b,c]=ndgrid(1:ma,1:mb,1:mc);
product = [A(a,:),B(b,:),C(c,:)];

More Answers (2)

Walter Roberson
Walter Roberson on 30 May 2021
[FG{:}] = ndgrid(Factors{:});
  2 Comments
Fab
Fab on 30 May 2021
cellsForNgrid = cell(1,numel(Factors));
[cellsForNgrid{:}]=ndgrid(Factors{:});
cellsForNgrid was needed since "[FG{:}]" doesn't contain the amount of cells that are needed.
Walter Roberson
Walter Roberson on 30 May 2021
True. Or you can
[cellsForNgrid{1:numel(Factors)}] = ndgrid(Factors{:});

Sign in to comment.


Fab
Fab on 30 May 2021
How would this ndgrid work with my code?
Read the documentation but i don't get the results i want.
I attached a picture of the result, if i use your code.

Categories

Find more on Discrete Math in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!