gpt4 book ai didi

arrays - 在 MATLAB 中将包含星号的字符数组转换为数字

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:07 28 4
gpt4 key购买 nike

我正在努力将包含星号 ('*') 的字符数组转换为 double 字。

我有一个基于从 .dat 文件导入的数据的字符向量元胞数组。例如,单元格数组 C 包含一列单元格(例如,C{1,1}、C{2,1}、... C{n,1} code>),每个都包含一个字符向量,例如,C{1,1} 包含:

'23.000          *          *      1.000      1.000      1.000     34.000      5.065      6.719'

当我尝试将 C{1,1} 转换为数字 double 值时,MATLAB 返回一个空 double 值,例如

new_double = str2num(C{1,1})

new_double =

[]

当我手动删除星号时,代码有效:

 new_double = str2num(C{1,1})

new_double =

23.0000 1.0000 1.0000 1.0000 34.0000 5.0650 6.7190

我想要做的就是将数据读入一个 double 组以供进一步处理。我不在乎命令是忽略星号还是用 NaN 替换它们 - 带星号的数据对我来说并不重要。重要的是我从最后两列读取数据,例如 5.065 6.71。不幸的是,我无法为它们编制索引,因为它们嵌入在字符向量中。

我也尝试过使用:

c2 = C{1,1};
new_double = sscanf(c2,'%f%');

但它在星号处停止阅读,例如,

new_double =

23

我进行了广泛的搜索,唯一有用的帖子是:https://uk.mathworks.com/matlabcentral/answers/127847-how-to-read-csv-file-with-asterix但是,我不能使用这种方法,因为我使用的是字符向量而不是定界数据。

最佳答案

另一种方式:

C{1,1} = '23.000          *          *      1.000      1.000      1.000     34.000      5.065      6.719';
result = str2double(strsplit(C{1}));

这给出了

result =
23.0000 NaN NaN 1.0000 1.0000 1.0000 34.0000 5.0650 6.7190

工作原理如下:

  1. strsplit在空格处拆分字符串。这给出了由连续的非空格字符组成的子串元胞数组;
  2. str2double将每个单元格转换为一个数字,并给出一个数字向量作为结果,在无法解释为数字的条目处使用 NaN

使用 str2double 而不是 str2num 的一个优点是前者不在内部使用 eval,因此它不能运行有潜在危险的代码。

关于arrays - 在 MATLAB 中将包含星号的字符数组转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44076249/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com