Borrar filtros
Borrar filtros

Splitting a cell array of multi-word strings into a cell array of single-word strings

1 visualización (últimos 30 días)
I have a cell array of multi-word strings that is very long (many tens of thousands of cells) that I want to split into a cell array of single-word strings. Is there a way to do this without combining the split function and a for loop?
Currently, I am doing the following:
CellStrings = {'Here is my First String';'Now a second string';'And here is a third'}
SingleColumnStrings = {};
for i = 1:length(CellStrings)
temp = split(CellStrings(i));
SingleColumnStrings = [SingleColumnStrings; temp];
clear temp
end
clear i
When CellStrings gets large, this for loop takes forever. Is there a way to do this as a matrix/vector operation?
Thanks in advance.
  1 comentario
Guillaume
Guillaume el 3 de Feb. de 2020
Note that clear is rarely needed. clear inside a loop is a particularly bad idea and will slow the loop for no useful purpose.

Iniciar sesión para comentar.

Respuesta aceptada

fred  ssemwogerere
fred ssemwogerere el 3 de Feb. de 2020
I think this can do nicely:
SingleColumnStrings=cellstr(strsplit(strjoin(string({'Here is my First String';'Now a second string';'And here is a third'})'))')
  1 comentario
Illan Kramer
Illan Kramer el 3 de Feb. de 2020
Editada: Illan Kramer el 3 de Feb. de 2020
That's perfect! My tic/toc runtime now for that operation has gone from over 50s to about 0.25s. Thanks so much! I actually just put the transpose on the outside of the entire right side of the equal sign instead of having 2 of them in there and it worked just as well.

Iniciar sesión para comentar.

Más respuestas (1)

Guillaume
Guillaume el 3 de Feb. de 2020
Editada: Guillaume el 3 de Feb. de 2020
Possiblty more efficient than the accepted answer since it doesn't require concatenating strings to then split them again:
SingleColumnStrings = regexp(CellStrings, '\S+', 'match');
SingleColumnStrings =[SingleColumnStrings{:}].';
  2 comentarios
Illan Kramer
Illan Kramer el 3 de Feb. de 2020
This is also a great solution, thanks! Comparing tic/toc runtimes, this one is 0.01s faster than the accepted answer. I will luxuriate in all of my new spare time upon deploying this solution going forward.

Iniciar sesión para comentar.

Categorías

Más información sobre Characters and Strings en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by