How to index a cell array of character vectors?

7 visualizzazioni (ultimi 30 giorni)
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!

Risposta accettata

Voss
Voss il 1 Mar 2022
Modificato: Voss il 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 Commenti
Stephen23
Stephen23 il 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};
Ludovico Nati
Ludovico Nati il 1 Mar 2022
It works great! Thanks for your help!

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by