フィルターのクリア

convert cell array of mixed strings to cell array of numbers

2 ビュー (過去 30 日間)
checker
checker 2023 年 2 月 8 日
コメント済み: Stephen23 2023 年 2 月 9 日
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
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)
out = 1×4 cell array
{[1000 NaN NaN NaN NaN]} {[NaN]} {[NaN]} {[1.2340]}
checker
checker 2023 年 2 月 9 日
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.

サインインしてコメントする。

回答 (1 件)

Stephen23
Stephen23 2023 年 2 月 9 日
編集済み: Stephen23 2023 年 2 月 9 日
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 件のコメント
Dyuman Joshi
Dyuman Joshi 2023 年 2 月 9 日
So the approach above is to divide each element into cell arrays and then use str2double?
Stephen23
Stephen23 2023 年 2 月 9 日
"So the approach above is to divide each element into cell arrays and then use str2double?"
Yes.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

タグ

製品


リリース

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by