MATLAB Answers

0

Cell array data to double conversion

Asked by Wouter Wizard on 7 Nov 2019
Latest activity Commented on by Guillaume
on 8 Nov 2019
Hi all,
I have a cell array that I want to transform to a double array. Then I would like to fill in the double array with data from cell arrays. To solve this problem I have tried two things:
  • I have tried cell2mat, which gave a result that I couldent interpret and didnt work.
  • I tried str2double, this does not give an error, but it writes only NaN values in the double array.
The names of the variables are
  • Comp_all: cell array
  • dat: translate cell to double
  • dat2013: double array which I would like to fill in
How can I transfer both numeric and non-numeric data from cel arrays to double arrays?
The code is used to do this looks like:
dat = str2double(Com_all);
dat2013 = zeros(length(dat),5);
dat2013(1:end,1) = dat(1:end,1);

  7 Comments

Okay thanks Stephen, I wil try the table!
The Assignment2.m is in my previous comment. Sorry if this caused confusion, I am new and a bit unfamiliar with how to post questions and data.
Another problem that I face is that I have the right information filtered in one of the cell arrays. I want to use that array as index for other cell arrays to extract the right data from it. However, I get an error that I cannot use a cell array for indexing.
To create input for the table I need the extracted data from the cell arrays. But I cannot translate the cell arrays into double arrays which allow indexing.
Guillaume
on 8 Nov 2019
Stephen's advice: "Use a table. A table is probably the best way to [work with your type of data"
Note that I already gave you that advice (and plenty more...) several days ago in a question that you then deleted (so I completely wasted my time helping you).

Sign in to comment.

1 Answer

Answer by CAM
on 7 Nov 2019
 Accepted Answer

Assuming each cell has only one entry, try using cellfun with str2double to convert the cell array of strings to a cell array of doubles, then use cell2mat.
Air code (untested; may need adjustment):
dblComp_all = cellfun(@str2double, Comp_all);
dat = cell2mat(dblComp_all);

  3 Comments

Note that
cellfun(@str2double, Comp_all)
will only run without error if each cell returns a scalar, in which case it is exactly equivalent to calling str2double directly on the cell array (just more complicated).
Possibly you forgot 'UniformOutput',false.
Thank you for replying CAM7, and providing a new code that I can test.
I tried to run the code and it gave this error:
Error in cell2mat (line 42)
cellclass = class(c{1});
Error in Assignment (line 55)
dat = cell2mat(dblCom_all);
With a fresh look and some modifications in my data your answer results in the correct solution. The lines that work for me are:
data = cellfun(@(s) strrep(s, ' ', ''), data, 'UniformOutput', false);
dbldata = cellfun(@str2double, data);

Sign in to comment.