【问题标题】:Convert cell array to array of strings将元胞数组转换为字符串数组
【发布时间】:2015-03-15 18:37:10
【问题描述】:

我从 Excel 中导入了一些信息,包括字符串和数字。我在 MATLAB 中以原始格式读取 Excel 文件

现在,我在一个大矩阵中有一列

 [1]
 '1A'
 [2]
 [3]
 [4]
 [505]
 [601]
 [7]
 [8]

这就是xlsread 命令给我的方式。我想将所有这些转换为字符串,例如 ['1' , '1A', '2' and so on..].

我正在努力做到这一点。我希望每个元素中都没有空格。我的意思是它不应该像[ ' 1', ' 1A', ' 2' and so on]....

【问题讨论】:

    标签: arrays string matlab cell


    【解决方案1】:

    尝试像这样组合cellfun 和num2str:

    A = {1, '1A', 2, 3, 4, 505, 601, 7, 8}'
    str = cellfun(@(c) num2str(c), A, 'UniformOutput', false).'
    str = 
    
        '1'    '1A'    '2'    '3'    '4'    '505'    '601'    '7'    '8'
    

    您可以在stings 上使用num2str,因此您不必检查变量是字符串还是数值。请注意,结果中的空格是在元素之间,而不是在元素本身中。所以,

    str(1)  
    ans =    
        '1'    
    str(2)    
    ans =     
        '1A'
    

    如果您的输入数据可能包含空格(您的示例没有),您可以使用额外的 cellfun 来消除这些空格,如下所示:

    cellfun(@(c) c(c~=' '), str, 'UniformOutput', false) 
    

    旁注:在大多数 MATLAB 函数中,您可以缩短参数名称,例如 UniformOutput, false。这可以是un, 0、uni, 0 ...等,只要这些字母代表一个唯一的参数并且不能表示其他含义。如果您在命令窗口中编写它,这是一个很好的技巧,但我会在实际代码中避免它,因为如果 MathWorks 确定创建一个名为 unit、UniformInput 或其他开始的参数,它可能会破坏代码与uni。一点小提示 =)

    【讨论】:

      【解决方案2】:

      有多种方法可以做到这一点。我假设你指的矩阵是一个单元格数组?这意味着它可以包含数字和字符串?

      如果是这样,您可以遍历每个单元格元素并使用 isa() 来确定每个元素中的对象类型,然后相应地转换为字符串(即 num2str())。

      如果遇到空格问题,请考虑在 matlab 中使用与 regexpr() 相关的函数系列,它们可以识别某些字符并执行诸如从 char 字符串中删除它们的操作。

      【讨论】:

      • 谢谢您的回复...我相信它被称为单元格数组...正如您在问题中看到的那样,它包含作为字符串的字符和作为单元格的数字我尝试循环遍历每个元素,但我面临一个问题。问题是当我使用 num2str....输出实际上不是在引号中,如 num2str(2) = 2 而不是 '2' 由于这个原因,当我到达它是像 '1A' 这样的字符串时,我是无法将这两个添加到同一个数组或矩阵中
      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多