[MATLAB] Dealing with high dimensional data in MATLAB

Ran across this problem when trying to simulate IPF–iterative proportional fitting for my STATS HW.

I was trying to construct a 7-dimensional matrix that represents clique potentials for 7 nodes. I found little resources on the web talking about dealing with high dimensional matrices in MATLAB (e.g. index specification, dimension expansion/reduction). So I just want to share some of the tricks/approaches we can use when having high dimensional (N>3) data in MATLAB.

I’m sure that there should be better solutions to address what I’m posting here, and any sharing and comment would be greatly appreciated.

Imagine we have a 2 by 2 by 2 by 2 by 2, a 5-dimensional matrix A, in MATLAB,

size(A)

would return

2 2 2 2 2

It’s usually simple to think of or visualize 2 or 3 dimensional data; but it’d be hard to create a high dimensional data image in mind.

  • How to automate the process of extracting only the nth dimension from A?

If we have a 2D matrix:

B = [1,2;3,4]
B(:,1)

would give us all the elements in the first dimension of B, in this case it’s

[1 2]

It’s not hard to think that for higher dimension that still works.

A(:,1,1,1,1)

would give us all the elements in the first dimension of A. Then the problem comes when we want to automate this extraction process. How can we make this into a for loop? There is a rather complicated way to do this. It works, but I’m sure that there could be better solutions. Hope someone can point it out.

We first create a cell with length same as the matrix dimension. This cell would store the index string we are creating.

ind = cell{1,5}

Use a for loop to set all values to

for i = 1:5
  ind{i} = {[1]};
end

The brace and brackets are important here. Each element within the cell array is a cell. Then we set the dimension we want to address to have the character:

':'
ind{dimension_addressed} = {':'};

The last step is to use this cell array to address the specific dimension we are referring to:

A(ind{:})

would be the correct way to automatically address the desired dimension in a high dimensional matrix in MATLAB.