replacing loop with cell of index values

I don't know how to explain with words what I'm trying to do, so here is an example
%I have an array of values
s = [1:100];
% and I have a cell array of different index values
c{1} = 1;
c{2} = 1:5;
c{3} = 2:2:10;
% I would like a cell array t, where
t{1} = s(c{1});
t{2} = s(c{2});
% etc.
% I can do this with a loop, but I'm wondering if there is a way to do this without a loop as my set of indices are large.

 Accepted Answer

s = 1:100;
c{1} = 1;
c{2} = 1:5;
c{3} = 2:2:10;
out = cellfun(@(x)s(x),c,'uni',0);
out{:}
ans = 1
ans = 1×5
1 2 3 4 5
ans = 1×5
2 4 6 8 10
A well-written (i.e. correctly preallocated, etc.) loop will be faster.

1 Comment

Thank you. Good to know that the loop might be faster.

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Asked:

on 16 Jan 2021

Commented:

on 16 Jan 2021

Community Treasure Hunt

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

Start Hunting!