How to call a function with rows of a matrix?

3 views (last 30 days)
UCL student
UCL student on 29 Oct 2014
Edited: Stephen23 on 30 Oct 2014
Hey,
I would like to vectorize a function call that I call with rows of a matrix. How can I implement it without a for loop?
Thanks.
  5 Comments
Julia
Julia on 30 Oct 2014
Edited: Julia on 30 Oct 2014
Your Res will be overwritten in each loop iteration.
If your function aFunction takes only vectors as its input and has a single number as output, I don't see a method to omit the loop.
UCL student
UCL student on 30 Oct 2014
I would like Res to be a vector of results.

Sign in to comment.

Answers (2)

the cyclist
the cyclist on 30 Oct 2014
Edited: the cyclist on 30 Oct 2014
Res = zeros(10000,1);
for looper=1:10000
Res(looper) = aFunction(Mat(looper,:),Mat2(looper,:))
end
Note that the first line, preallocating memory is important for the loop to operate efficiently.
If you want to post your aFunction code, it might be possible to identify a way to eliminate the loop entirely.

Stephen23
Stephen23 on 30 Oct 2014
Edited: Stephen23 on 30 Oct 2014
One easy way is to use num2cell to split the numeric arrays into rows/columns/..., and then cellfun on the resulting cell arrays (change the variable names to suit):
out = cellfun(@fun,num2cell(M1,2),num2cell(M2,2),...);
This method assumes that @fun operates on a vector and returns a scalar.
Alternatively you could use the table data class, which supports the function rowfun.

Categories

Find more on Cell Arrays 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!