How to convert a cell array of singles and doubles to an array of a single type (double)?

6 views (last 30 days)
I queried a database for an array of numerical values. The query is a function call that returns a struct of different cell-arrays (one of which is "struct.speed"). I tried use cell2mat() to convert each cell element to an array (of a uniform type, which is what cell2mat does) but I found out that some cells contained `singles` while others contained `doubles` (doubles where there were NaN values).
Attached is "struct.speed" (as well as the original struct) and the call I used to check the type of each cell element was:
cellfun(@class, struct.speed(:,1), 'UniformOutput', false);
I tried calling typecast and it produced an error I didn't understand:
EDITED: Oh right -- struct.speed(:,1) is a cell array and type cast only works on numeric values (or arrays of them).
K>> typecast(struct.speed(:,1), 'double')
??? Error using ==> typecastc
The first input argument must be a full, non-complex numeric value.
Error in ==> typecast at 31
out = typecastc(in, lower(datatype));
I need to do the type casting because I wanted to use slice-notation to assign the result to another struct "WHBB.Speed":
WHBB.Speed(:, bin) = struct.speed(:,1); % Error: Conversion to double from cell is not possible
The above statement works for slices of struct.speed that doesn't contain a mix of NaN's and numeric values (slices of all NaNs or slices of all doubles)

Accepted Answer

Stephen23
Stephen23 on 19 Sep 2018
Edited: Stephen23 on 19 Sep 2018
Assuming that each cell contains a scalar value:
cellfun(@double,myStruct.speed)

More Answers (1)

Minh Tran
Minh Tran on 19 Sep 2018
Edited: Minh Tran on 19 Sep 2018
A solution I just came up with that is kind of clunky:
result = NaN(size( struct.speed(:,1) )); % Preallocate a vector of NaNs
for i=1:length(struct.speed(:,1))
result(i) = double( struct.speed{i,1} ); % Element wise conversion of all elements to doubles
end

Categories

Find more on Data Type Conversion in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!