fast way of filing up a matrix with function calls
Show older comments
i have a 2-D matrix m(i,j). for each (i,j) some function f(i,j) has to be evaluated and that fills up the matrix m(i,j). presently i am using a loop for i=1:N for j=1:N mat(i,j) = f(i,j); to fill up the matrix. Is there a faster implementation of this piece of code.
1 Comment
Matt J
on 21 Dec 2012
What does f() look like?
Answers (2)
If f() is element-wise vectorized, you could do this
[I,J]=ndgrid(1:N,1:N);
mat=f(I,J)
but more optimal approaches might still be possible depending on the form of f().
Azzi Abdelmalek
on 21 Dec 2012
Edited: Azzi Abdelmalek
on 21 Dec 2012
M=rand(4); % your matrix
f=@(x) sin(x)*x % your function
out=arrayfun(@(x) f(x),M)
Or you can use operation element by elemment (Faster)
out=sin(M).*M
4 Comments
Matt J
on 21 Dec 2012
Well ... but the OP asked for a "faster" approach. We know arrayfun is unlikely to execute faster than a for-loop.
Azzi Abdelmalek
on 21 Dec 2012
You are right. The for loop is faster then arrayfun, but I think the op element/element is faster then the for loop
Kaushik
on 21 Dec 2012
Azzi Abdelmalek
on 21 Dec 2012
Edited: Azzi Abdelmalek
on 21 Dec 2012
x_grid=1:5;
y_grid=1:4;
[M1,M2]=meshgrid(x_grid,y_grid)
Then calculate using M1 and M2
Categories
Find more on Loops and Conditional Statements 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!