Converting cell of numbers to double

9 views (last 30 days)
Andromeda on 27 May 2022
Commented: Steven Lord on 27 May 2022
Hi. How do I convert a cell of numbers from cell to double? I looked up the previously asked questions but they mostly involved strings and I have numbers. I didn't post any code, I just want to know if there's any way of doing it if you have a cell class with mutiple matrices in it. How can I also store a cell class in a structure array where each "f1" and "f2" will be the field?
This is what I am having
fie =
2×2 cell array
{["f1"]} {3×7 cell}
{["f2"]} {4×7 cell}
This is what I want
fie =
2×2 cell array
{["f1"]} {3×7 double}
{["f2"]} {4×7 double}
Stephen23 on 27 May 2022
Why fix this problem later, when you could fix it when you import the data?:

Steven Lord on 27 May 2022
If the cells in that cell array in the upper-right cell of your outer cell array can be concatenated to form a matrix you could use cell2mat.
C = mat2cell(reshape(1:21, 3, 7), ones(3, 1), [2, ones(1, 5)]) % Making sample data
C = 3×6 cell array
{[1 4]} {[7]} {[10]} {[13]} {[16]} {[19]} {[2 5]} {[8]} {[11]} {[14]} {[17]} {[20]} {[3 6]} {[9]} {[12]} {[15]} {[18]} {[21]}
A = {'abc', C}
A = 1×2 cell array
{'abc'} {3×6 cell}
B = cell2mat(A{1, 2})
B = 3×7
1 4 7 10 13 16 19 2 5 8 11 14 17 20 3 6 9 12 15 18 21
A{1, 2} = B
A = 1×2 cell array
{'abc'} {3×7 double}
This wouldn't work if C is not of a form that can be combined together into a matrix, like if the contents of the cells in C don't have compatible numbers of rows and/or columns.
D = {[1 2], 3; [4 5 6], 7} % Can't have a matrix whose rows have different numbers of columns
D = 2×2 cell array
{[ 1 2]} {[3]} {[4 5 6]} {[7]}
cell2mat(D)
Error using cat
Dimensions of arrays being concatenated are not consistent.

Error in cell2mat (line 83)
m{n} = cat(1,c{:,n});
Steven Lord on 27 May 2022
q = reshape(1:21, 3, 7)
q = 3×7
1 4 7 10 13 16 19 2 5 8 11 14 17 20 3 6 9 12 15 18 21
mystruct.A = q
mystruct = struct with fields:
A: [3×7 double]
y = mystruct.A
y = 3×7
1 4 7 10 13 16 19 2 5 8 11 14 17 20 3 6 9 12 15 18 21
check = isequal(q, y) % true
check = logical
1

Fangjun Jiang on 27 May 2022
cell2mat()
cell2struct()