How to index a cell array of character vectors?

7 views (last 30 days)
Hello everyone,
I have problem in my code. Suppose I have 'c' which is a cell array of character vectors of dimension N by 1. I would like to index each element of 'c' with a given pair of 'si' (start index) and 'ei' (end index), which can be different for any element of 'c'. 'si' and 'ei' are both N by 1 numerical vector or cell array containg numerical elements.
I would like a function to use in cellfun like in this piece of code: newc = cellfun(@tbd,c,si,ei,'UniformOutput',false). 'newc' of course is a new cell array of character vectors , where the ith element would be like: newc{i} = x{i}(si{i}:ei{i});
I can create a function tbd (to be determined) by myself but I think that there are already more efficient and native way to do it.
Thanks for your help!

Accepted Answer

Voss
Voss on 1 Mar 2022
Edited: Voss on 1 Mar 2022
% If si and ei are cell arrays containing scalar indices:
c = {'indexing'; 'a cell array'; 'of character'; 'vectors'};
si = {1; 3; 4; 5};
ei = {5; 6; 7; 6};
newc = cellfun(@(x,y,z)x(y:z),c,si,ei,'UniformOutput',false)
newc = 4×1 cell array
{'index'} {'cell' } {'char' } {'or' }
% If si and ei are numeric vectors:
c = {'indexing'; 'a cell array'; 'of character'; 'vectors'};
si = [1; 3; 4; 5];
ei = [5; 6; 7; 6];
newc = arrayfun(@(x,y,z)x{1}(y:z),c,si,ei,'UniformOutput',false)
newc = 4×1 cell array
{'index'} {'cell' } {'char' } {'or' }
% or:
newc = cellfun(@(x,y,z)x(y:z),c,num2cell(si),num2cell(ei),'UniformOutput',false)
newc = 4×1 cell array
{'index'} {'cell' } {'char' } {'or' }
  2 Comments
Stephen23
Stephen23 on 1 Mar 2022
Why create cell array and transpose?:
si = {1,3,4,5}.';
get rid of the superfluous transpose:
si = {1;3;4;5};

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!