How to call a function with rows of a matrix?

조회 수: 3 (최근 30일)
UCL student
UCL student 2014년 10월 29일
편집: Stephen23 2014년 10월 30일
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
Julia
Julia 2014년 10월 30일
편집: Julia 2014년 10월 30일
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 2014년 10월 30일
I would like Res to be a vector of results.

댓글을 달려면 로그인하십시오.

답변 (2개)

the cyclist
the cyclist 2014년 10월 30일
편집: the cyclist 2014년 10월 30일
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 2014년 10월 30일
편집: Stephen23 2014년 10월 30일
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.

카테고리

Help CenterFile Exchange에서 Line Plots에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by