How to call a function with rows of a matrix?

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

There is not remotely enough detail here to answer. Think from our perspective on this.
Sorry, a bit of code
for looper=1:10000
Res = aFunction(Mat(looper,:),Mat2(looper,:))
end
Mat is 10000*6, Mat2 is 10000*9, and I would like to pass them row by row to the function aFunction. Thanks.
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.
I would like Res to be a vector of results.

Sign in to comment.

Answers (2)

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 Loops and Conditional Statements in Help Center and File Exchange

Asked:

on 29 Oct 2014

Edited:

on 30 Oct 2014

Community Treasure Hunt

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

Start Hunting!