Borrar filtros
Borrar filtros

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

6 visualizaciones (últimos 30 días)
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)

Respuesta aceptada

Stephen23
Stephen23 el 19 de Sept. de 2018
Editada: Stephen23 el 19 de Sept. de 2018
Assuming that each cell contains a scalar value:
cellfun(@double,myStruct.speed)

Más respuestas (1)

Minh Tran
Minh Tran el 19 de Sept. de 2018
Editada: Minh Tran el 19 de Sept. de 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

Categorías

Más información sobre Data Type Conversion en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by