How to call a function with rows of a matrix?

3 visualizaciones (últimos 30 días)
UCL student
UCL student el 29 de Oct. de 2014
Editada: Stephen23 el 30 de Oct. de 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 comentarios
Julia
Julia el 30 de Oct. de 2014
Editada: Julia el 30 de Oct. de 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 el 30 de Oct. de 2014
I would like Res to be a vector of results.

Iniciar sesión para comentar.

Respuestas (2)

the cyclist
the cyclist el 30 de Oct. de 2014
Editada: the cyclist el 30 de Oct. de 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 el 30 de Oct. de 2014
Editada: Stephen23 el 30 de Oct. de 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.

Categorías

Más información sobre Cell Arrays en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by