【问题标题】:Cell array of strings - check elements in Matlab字符串元胞数组 - 在 Matlab 中检查元素
【发布时间】:2015-05-11 10:09:12
【问题描述】:

在 Matlab 中,如果我有一个字符串元胞数组,我如何检查例如第 3 行和第 1 列是否等于某个给定字符串,例如 'ABC'

例如,myArray(3,1) == 'ABC' 给我一个错误:

“cell”类型的输入参数的未定义运算符“==”。

cw14 中的错误(第 19 行)
if myArray(3,1) == 'ABC'

【问题讨论】:

    标签: arrays matlab cell


    【解决方案1】:

    那是因为您需要使用 {花括号} 才能访问元胞数组的 内容

    使用(正括号)索引实际的 cell,在您的情况下它包含一个字符串。此外,为了检查字符串的存在,我建议使用strcmpstrfind

    因此使用这个:

    strcmp(myArray{3,1},'ABC')
    

    查看here 了解有关对元胞数组进行索引的信息。

    编辑(跟随 cmets)

    使用逻辑 == 将字符串查找到元胞数组中是不安全的,因为使用此运算符会拆分字符串并比较形成它的每个字母,而不是 strcmp 等检查整个字符串。

    考虑这段代码,我将一些字符串放入myArray

    myArray = {'A' 'B' 'ABC' 'CBA' 'ABC'}.'
    
    myArray = 
    
        'A'
        'B'
        'ABC'
        'CBA'
        'ABC'
    

    如果我们对这个字符串元胞数组应用==,如下所示:

    Check_31 = myArray{3,1} == 'ABC'
    
    Check_41 = myArray{4,1} == 'CB_'
    

    Matlab 返回这两个逻辑向量:

    Check_31 =
    
         1     1     1
    
    
    Check_41 =
    
         1     1     0
    

    如您所见,字符“_”不是单元格 {4,1} 中字符串的最后一个元素。

    现在如果我们使用strcmp(在整个单元格数组上;我们不需要索引特定单元格来检查是否存在某个字符串):

    Check_ABC = strcmp(myArray,'ABC')
    

    我们还得到了一个逻辑向量,但这次不是指在单元格内形成字符串的 3 个字母,而是指单元格数组本身以及是否存在“ABC”。结果是这样的:

    Check_ABC =
    
         0
         0
         1
         0
         1
    

    这是有道理的,因为“ABC”确实存在于单元格 {3,1} 和 {5,1} 中。

    希望这更清楚!

    【讨论】:

    • myArray{3,1} == 'ABC' 工作正常,但如果我在循环中执行,例如 myArray{i,1} == 'ABC' (循环 i)它没有。它说矩阵尺寸必须一致。为什么它不起作用以及为什么我们必须在这里使用 strcmp?
    • strcmp(myArray{i,1},'ABC') 怎么样?
    • 使用 == 可以使用右侧字符数组 'ABC' 的所有元素测试字符数组 {i,1} 的每个元素。比较 'XYZ' == 'ABC' 给出 [0 0 0] 但 'XY' == 'ABC' 给出错误,因为尺寸不一致(2 与 3 不同)。
    • 请看我编辑的答案。谢谢@JaBe haha​​,就是这样:)
    • 太棒了!很高兴帮助:)
    猜你喜欢
    • 2011-02-07
    • 2015-04-23
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 2011-03-28
    相关资源
    最近更新 更多