convert cell array of mixed strings to cell array of numbers
1 回表示 (過去 30 日間)
古いコメントを表示
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 件のコメント
Dyuman Joshi
2023 年 2 月 8 日
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)
回答 (1 件)
Stephen23
2023 年 2 月 9 日
編集済み: Stephen23
2023 年 2 月 9 日
ca = {' [1000 X X X X]', ' X', ' X', ' 1.234' }
out = regexp(ca,'[^\s\[\]]+','match');
out = cellfun(@str2double,out,'uni',0)
2 件のコメント
Dyuman Joshi
2023 年 2 月 9 日
So the approach above is to divide each element into cell arrays and then use str2double?
Stephen23
2023 年 2 月 9 日
"So the approach above is to divide each element into cell arrays and then use str2double?"
Yes.
参考
カテゴリ
Help Center および File Exchange で Data Type Conversion についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!