convert cell array of mixed strings to cell array of numbers

2 visualizaciones (últimos 30 días)
checker
checker el 8 de Feb. de 2023
Comentada: Stephen23 el 9 de Feb. de 2023
I have a cell array as follows:
ca = [{' [1000 X X X X]' } {' X' } {' X' } {' 1.234' }];
I would like to convert this into a numeric cell array where 'X' is interperted as 'NaN'. My solution uses the following function:
function out = x2decimal(in)
%sscanf doesn't handle NaN
X = NaN;
out = eval(in);
return
In cellfun:
out = cellfun(@(x) x2decimal(x), ca, 'Uni', false)
out = {1×5 double} {[NaN]} {[NaN]} {[1.2340]}
out{1} = 1000 NaN NaN NaN NaN
My solution works but contains the dreaded eval function. Do you see an alternative that is more mat-thonic?
On windows 10, matlab 2020b.
Thanks,
-Chris
  2 comentarios
Dyuman Joshi
Dyuman Joshi el 8 de Feb. de 2023
Not sure about mat-thonic, but here is another approach -
ca = [{' [1000 X X X X]' } {' X' } {' X' } {' 1.234' }];
ca = replace(ca,'X', 'NaN');
out = cellfun(@str2num, ca, 'uni', 0)
out = 1×4 cell array
{[1000 NaN NaN NaN NaN]} {[NaN]} {[NaN]} {[1.2340]}
checker
checker el 9 de Feb. de 2023
Thanks, that saves me a custom function. Interestingly, str2num uses eval! I'd use str2double but want to perserve exactly the textual representation of the numbers (which are sourced from a single precision float) and it's not clear to me how str2double would affect the display.

Iniciar sesión para comentar.

Respuestas (1)

Stephen23
Stephen23 el 9 de Feb. de 2023
Editada: Stephen23 el 9 de Feb. de 2023
ca = {' [1000 X X X X]', ' X', ' X', ' 1.234' }
ca = 1×4 cell array
{' [1000 X X X X]'} {' X'} {' X'} {' 1.234'}
out = regexp(ca,'[^\s\[\]]+','match');
out = cellfun(@str2double,out,'uni',0)
out = 1×4 cell array
{[1000 NaN NaN NaN NaN]} {[NaN]} {[NaN]} {[1.2340]}
  2 comentarios
Dyuman Joshi
Dyuman Joshi el 9 de Feb. de 2023
So the approach above is to divide each element into cell arrays and then use str2double?
Stephen23
Stephen23 el 9 de Feb. de 2023
"So the approach above is to divide each element into cell arrays and then use str2double?"
Yes.

Iniciar sesión para comentar.

Categorías

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

Etiquetas

Productos


Versión

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by