I've recently been asked some questions about programming safely to account for N-dimensional data. Techniquest that are tried-and-true for two dimensions don't all scale to N dimensions.
Contents
Code That's Not Recommended
The following code doesn't catch dimensions higher than 2.
if any(any(input))
output = doAlg(input);
endThis code is also not recommended because n will be a scalar even if input has more than 2 dimensions. Depending on what is done in the loop, the output might be the wrong shape/dimension (thanks to Jeremy so I could clarify this).
[m,n] = size(input);
for i=1:n
doSomething;
endCode That is Safe for Higher Dimensions
This code should work fine for any input.
sz = size(input);
if any(input(:))
output = doAlg(input);
end
output = reshape(output,sz);Benefits
If you consider N-dimensional input when you write functions, you are less likely to find bugs or wrong answers when you go to use it later.
* The code is easier to understand without so many any statements. * Code is robust to N-dimensional inputs.
Your Advice?
What techniques have you used to ensure your code works with all array shapes? List them here.
Get
the MATLAB code
Published with MATLAB® 7.4

Actually, if one calls “[m,n] = size(input)” where input has more than 2 dimensions, n is not a vector. It is simply a product of the remaining dimension sizes.
I suppose matlab arrays aren’t tensors. However, has there been any discussion about implementing tensor algebra, or can it be done with dimension arguments? For instance, in some circumstances, one might like to consider the column and row dimensions as both being 1 with a new argument to indicate dual space.
there are a few helpers, which should not be discarded and often are very useful for preliminary error checking procedures
help isempty
help isscalar
help isvector
help ndims
us
Jeremy-
You are right about size, of course. But it is still possible that your code, if dependent on n for pre-allocation, for instance, will be incorrect for N-dimensional inputs.
Urs-
Thanks for the list.
–Loren