How I could convert matrix (double) to cell array of string

I have the following matrix and I want to convert it in cell array of string.
Please help me with this issue.
A=[-1; -3; -5; -5; -6; -7; -9; -3; -7; -9; -8; -9; -10]

 Accepted Answer

A_cell = cellstr(str2num(A));

5 Comments

Many thanks for the answer. I used your code and I got the following error.
Error using str2num (line 32)
Requires string or character array input.
Error in (line 2) A_cell = cellstr(str2num(A))
A_cell = cellstr(num2str(A));
I don't know why I keep getting that reversed...
This is not correct. Str2num converts strings to numeric format, but the question was the other way around. The correct and best answer should be https://se.mathworks.com/matlabcentral/answers/286544-how-i-could-convert-matrix-double-to-cell-array-of-string#answer_331847
Look at the correction posted in May 2016

Sign in to comment.

More Answers (5)

Use undocumented function:
sprintfc('%d',A)

5 Comments

This is the best implementation I have seen. Very nice!
This needs to be higher ! Thanks !
Awesome! Thanks for this extremely concise method. As Patrick said, this needs to be higher!
This functionality is basically the same as the documented function compose. Try
compose('%d',A)
Note: compose requires R2016b or later.

Sign in to comment.

This one worked for me:
strsplit(num2str(A))

3 Comments

but it'll work only on row vector
This can work for a general matrix using
strsplit(num2str(A(:)'))
and reshaping as necessary.
This is correct answer and worked for me.

Sign in to comment.

Using one function:
compose('%g',A)

3 Comments

This, that you say is "best answer", is the same solution that was posted 23 months earlier at https://www.mathworks.com/matlabcentral/answers/286544-how-i-could-convert-matrix-double-to-cell-array-of-string#comment_637933
Also, at the time of the original question, compose() did not exist: the original question was May 2016, which was R2016a, but compose() was introduced as part of the string operations in R2016b.

Sign in to comment.

Wouldn't string(A) work?

3 Comments

DGM
DGM on 27 Feb 2024
Edited: DGM on 27 Feb 2024
I suppose it does, but to be fair, that wouldn't have been an option in early 2016.
I did test it and it worked, but wasn't sure about 2016 compatibility so I figured I'd put it as a tentative answer.
DGM
DGM on 27 Feb 2024
Edited: DGM on 27 Feb 2024
As far as I know, string() was introduced in R2016b, but I don't know that it's early behavior was the same as it is today. I think it's safe to say the legacy options don't matter to most readers, and they'd probably be fine with your answer. The only reason I bring it up is to explain why it hadn't been mentioned at the time the question was asked.

Sign in to comment.

Hi all,
If we define A as a matrix
A = [1 , 2 ; 3 , 4]
And we want to create a cell string matrix, do we do the following?
B = cellstr(num2str(A))
for i = 1:length(B)
C(i,:) = strsplit(B{i,1}) ;
end
Is there a way to ignore the loop?

1 Comment

A = [1 , 2 ; 3 , 4]
A = 2×2
1 2 3 4
B = cellstr(string(A))
B = 2×2 cell array
{'1'} {'2'} {'3'} {'4'}

Sign in to comment.

Asked:

on 31 May 2016

Edited:

DGM
on 27 Feb 2024

Community Treasure Hunt

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

Start Hunting!