convert cell array of mixed strings to cell array of numbers

1 vue (au cours des 30 derniers jours)
checker
checker le 8 Fév 2023
Commenté : Stephen23 le 9 Fév 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 commentaires
Dyuman Joshi
Dyuman Joshi le 8 Fév 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 le 9 Fév 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.

Connectez-vous pour commenter.

Réponses (1)

Stephen23
Stephen23 le 9 Fév 2023
Modifié(e) : Stephen23 le 9 Fév 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 commentaires
Dyuman Joshi
Dyuman Joshi le 9 Fév 2023
So the approach above is to divide each element into cell arrays and then use str2double?
Stephen23
Stephen23 le 9 Fév 2023
"So the approach above is to divide each element into cell arrays and then use str2double?"
Yes.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Data Type Conversion dans Help Center et File Exchange

Tags

Produits


Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by