File Exchange

image thumbnail

apply

version 1.0 (1.68 KB) by

Apply a function looping over a dimension of a matrix

1 Download

Updated

View License

This function should help when it is difficult to generalize a function to operate on all dimensions.

Examples
--------
Take the eig of each page in the 3rd dimension

b = apply(@eig,rand(4,4,3),3,'uni',0)

Normalize each column
b = apply(@norm, rand(5,3), 2)

Normalize each row
b = apply(@norm, rand(5,3), 1)

Comments and Ratings (5)

Ged Ridgway

Ged Ridgway (view profile)

This looks like a useful helper-function to me. I have what I hope is a complementary helper-function
http://www.mathworks.com/matlabcentral/fileexchange/28255
that can be used when you want to apply a function to vectors along a dimension, rather than (potentially higher dimensional) arrays perpendicular to that dimension.

To clarify the differences, with a 3d array:
  r = randn(4,4,4);
the second of the four elements returned by:
  n = apply(@norm, r, 3)
gives the matrix norm of the second matrix:
  norm(r(:,:,2)
where matrices are stacked in the third dimension.

In contrast,
  n = dimfunc(@norm, r, 3)
gives you a 4-by-4 matrix of the vector norms, for vectors running along the third dimension, e.g. element n(2,3) equals:
  norm(squeeze(r(2,3,:)))

I hope that both functions will be useful for simplifying code to handle nD arrays.

Keith Bensar

Good for clear code but doesn't increase speed.

Marc Cott

Excellent tool.

Jeremy Spear

Examples worked fine. I'll refine rating after error checking and documentation completed.

Jos x@y.z

Do not waste bandwidth with something unfinished ...

MATLAB Release
MATLAB 7.5 (R2007b)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video