Info

This question is closed. Reopen it to edit or answer.

How to avoid using for loops when declaring functions in a cell array

1 view (last 30 days)
In my source codes:
clear all
fout=cell(1,10);
B=zeros(10,20);
for ii=1:1:10
fout{ii}=@(x) 2*pi*x*(1:1:20)+ii;
end
for ii=1:1:10
B(ii,:)=fout{ii}(2);
end
display(B);
How can I use the matlab vectorization to declare functions in a cell array as well as to provide function outputs in one go rather than using two for loops? M

Answers (1)

Adam Danz
Adam Danz on 11 Sep 2020
Edited: Adam Danz on 11 Sep 2020
You only need 1 anonymous function if you include ii as a second input. ii must be a column vector and x must be a row vector.
fout = @(x,ii) 2*pi*x*(1:1:20)+ii;
B = fout(2,(1:10)');
Alternatively, the 2nd loop in your question can be replaced by
y = cell2mat(arrayfun(@(i){fout{i}(2)},1:10)');
however, your loop is more efficient, faster, and easier to read.
  4 Comments

Community Treasure Hunt

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

Start Hunting!