Clear Filters
Clear Filters

Using ndgrid in arbitrary dimensions

6 views (last 30 days)
melampyge
melampyge on 13 Aug 2013
Hi,
I have a 3x20 matrix called b. If I use ndgrid like this:
[xx, xy, xz] = ndgrid(b(1,:),b(2,:),b(3,:));
I get 20x20x20 matrices for each parameter xx,xy and xz which is what I want in the case that b has 3 rows. My problem is, I need to generalize this, for example, b might be 4x20 matrix or 5x20 matrix. In these cases I need to write the code like this:
[xx, xy, xz, xa] = ndgrid(b(1,:),b(2,:),b(3,:),b(4,:));
So my question is, how do I generalize this to an arbitrary M dimension, that is, if I have b as a Mx20 matrix, how can I use ndgrid?

Answers (1)

Sean de Wolski
Sean de Wolski on 13 Aug 2013
Edited: Sean de Wolski on 13 Aug 2013
There's a fun exercise in crashing my computer. Don't use a large b ;)
b = magic(3); %example
bc = num2cell(b,1); %cells columnwise
clear bbc; %in case it exists
[bbc{1:numel(bc)}] = ndgrid(bc{:}); %use comma-separated list expansion on both sides
Note, instead of creating four new variables, I create a cell array that contains them. This scales much better!
  4 Comments
melampyge
melampyge on 13 Aug 2013
Actually I want to do it this way. I made my matrix b smaller (after several Matlab and computer crashes) and after that I got an array bcc with 1x15 cells, now I need to create xx, xy, xz 15x15x15 matrices from these cells I guess.
melampyge
melampyge on 13 Aug 2013
But it seems like I can't seperate them with cell2mat.

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!