【问题标题】:adding a string to an empty array gives `NAN`将字符串添加到空数组会给出“NAN”
【发布时间】:2021-05-04 13:15:03
【问题描述】:

在 MATLAB 中,我想迭代地将字符串添加到数组s,并通过s = [] 初始化s。但是,当我运行下面的代码时

s = [];
s(end+1) = "a";
s(end+1) = "b";

结果

>> s

s =

   NaN   NaN

有人知道这个问题的原因和解决方法吗?


但是,当我在s 中已经有了"",即s = [""],那么以下所有元素都可以毫无问题地添加到s

s = [""];
s(end+1) = "a";
s(end+1) = "b";

给予

s = 

  1×3 string array

    ""    "a"    "b"

【问题讨论】:

    标签: arrays string matlab vector


    【解决方案1】:

    当你初始化一个新数组时:

    s = []
    

    s 默认属于 double 类。

    因此,当您尝试在此数组中添加新字符串时,matlab 会尝试执行隐式转换 string -> double。当 matlab 必须处理 string -> double 转换时输出 NaN(除非该字符串可以解释为数字 as mentionned by @CrisLuengo)。例如:

    double("a") 
    % Produce Nan
    

    您可以使用strings 显式选择数组的数据类型,而不是使用[] 初始化您的数组:

    s = strings(0); % We create a 0x0 strings array. 
    s(end+1) = "a";
    s(end+1) = "b";
    

    我们得到:

    s = 
    
      1×2 string array
    
        "a"    "b"
    

    当你初始化一个已经包含一个空字符串的数组时,matlab 明白它需要生成一个字符串数组。

    【讨论】:

    • 感谢您的解释。不错的答案!
    【解决方案2】:

    要添加到obchardon’s correct answer(请先阅读!):

    1. 当字符串不能被解释为数字时,将字符串转换为双精度会产生 NaN。 double("1") 返回 1。

    2. 字符串字符数组是有区别的。将" 替换为' 后,OP 的代码可以正常工作,因为字符始终可以转换为双精度(导致它们的 ASCII 值)。但是它只适用于单个字符,多个字符(一个字符数组)将转换为一个双精度数组,每个字符一个,并且不适合单个数组元素。

      >> s = [];
      >> s(end+1) = 'a';
      >> s(end+1) = 'b';
      >> s
      s =
          97    98
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 2015-10-21
      • 2012-12-15
      • 2021-01-01
      • 2010-11-01
      • 2011-04-03
      • 2015-02-15
      相关资源
      最近更新 更多