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

标签 arrays string matlab double character

我正在努力将包含星号 ('*') 的字符数组转换为 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/

相关文章:

matlab - 是否可以在 MATLAB 对象之间共享数据,例如查找表?

matlab - 当我应用 notboxplot 函数生成 beeswarm 箱线图时,如何更改标记透明度?

c - 如何找出为结构创建的数组中元素的数量?

arrays - Big-Theta(n) 线性排序算法?

arrays - 如何快速比较变量 String() 和字符串?

java - 硬编码字符串有效,输入字符串无效

php - 如何在 PHP 中按值对数组进行排序并保留键?

ios - 检查可选数组是否为空

java - 我可以改进这个 Pig-Latin 转换器吗?

matlab - 创建 Bokeh 效果