Converting entire cell array to strings

46 vues (au cours des 30 derniers jours)
Rainer
Rainer le 3 Juin 2015
Modifié(e) : per isakson le 5 Juin 2015
x={'words',10,20,30,'more words'}
How do I convert the entire cell array above to strings?
  2 commentaires
Image Analyst
Image Analyst le 3 Juin 2015
x{1} and x{5} are already strings. Do you want to scan the cell array and convert the cells that have numbers in them to strings? Or do you want 5 separate string variables, like x1, x2, x3, x4, and x5?
x1 = x{1}
x2 = num2str(x{2});
x3 = num2str(x{3});
x4 = num2str(x{4});
x5 = x{5};
Rainer
Rainer le 3 Juin 2015
Modifié(e) : Rainer le 3 Juin 2015
I want to have a generalized solution where I can convert a cell array which is randomly populated with doubles and strings.
{'words',10,20,30,'more words',10,9} becomes {'words','10','20','30','more words','10','9'}
{94,'cows',10,'dogs',30,10,'cats','birds'} becomes {'94','cows','10','dogs','30','10','cats','birds'}

Connectez-vous pour commenter.

Réponse acceptée

Azzi Abdelmalek
Azzi Abdelmalek le 3 Juin 2015
x={'words',10,20,30,'more words'}
out=cellfun(@num2str,x,'un',0)
  2 commentaires
Guillaume
Guillaume le 3 Juin 2015
Modifié(e) : Guillaume le 5 Juin 2015
It works because num2str just return the string unchanged when given a string.
edit: As pointed out by per, this relies on the undocumented and actually unexpected behaviour of num2str. Such code could break in the future. (But mathworks also often breaks documented behaviour)
Rainer
Rainer le 3 Juin 2015
Excellent! Thanks Azzi

Connectez-vous pour commenter.

Plus de réponses (1)

per isakson
per isakson le 3 Juin 2015
is this close to what you want?
>> strsplit( strjoin(x), ',')
ans =
'words' '10' '20' '30' 'more words'
  7 commentaires
Guillaume
Guillaume le 5 Juin 2015
You're right the behaviour of num2str with string inputs is not documented and kind of unexpected. If num2str adhered to its documentation it should throw an error when passed a string. Sloppy coding or sloppy documenting.
Perhaps matlab should have a ToString function like java and .Net.
The behaviour of int2str makes sense to me. It's equivalent to
num2str(uint16('ten'));
per isakson
per isakson le 5 Juin 2015
Modifié(e) : per isakson le 5 Juin 2015
It doesn't help the beginner, me included, that the two functions, num2str and int2str handle string inputs differently.
Yes, "the behavior of int2str makes sense" and that's because it dates back to the beginning of Matlab when everything was numerical arrays. A string was just another way to interpret the array. (My mental model.) By the way, I use strfind to search for sequences of whole numbers in double arrays. I think of that as "us' trick".
However, this behavior of int2str is not documented(?)
There are a number of fundamental function, which converts strings to vectors of ascii-numbers. That is not explicitly stated in the documentation(?)
>> real('ten')
ans =
116 101 110
>> uint16('ten')
ans =
116 101 110
Enough ranting for now!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by