How to call a function with rows of a matrix?

3 Ansichten (letzte 30 Tage)
UCL student
UCL student am 29 Okt. 2014
Bearbeitet: Stephen23 am 30 Okt. 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 Kommentare
Julia
Julia am 30 Okt. 2014
Bearbeitet: Julia am 30 Okt. 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 am 30 Okt. 2014
I would like Res to be a vector of results.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

the cyclist
the cyclist am 30 Okt. 2014
Bearbeitet: the cyclist am 30 Okt. 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 am 30 Okt. 2014
Bearbeitet: Stephen23 am 30 Okt. 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.

Kategorien

Mehr zu Cell Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by