字符串元胞数组 - 在 Matlab 中检查元素
Cell array of strings - check elements in Matlab
在 Matlab 中,如果我有一个字符串元胞数组,我如何检查第 3 行和第 1 列是否等于某个给定字符串,例如 'ABC'
?
例如,myArray(3,1) == 'ABC'
给我一个错误:
Undefined operator '==' for input arguments of type 'cell'.
Error in cw14 (line 19)
if myArray(3,1) == 'ABC'
那是因为您需要使用{大括号}才能访问元胞数组的内容。
使用(正括号)索引实际的 cell,在您的例子中它包含一个字符串。此外,为了检查字符串的存在,我建议使用 strcmp or maybe strfind.
因此使用这个:
strcmp(myArray{3,1},'ABC')
查看 here 以获取有关索引到元胞数组的信息。
编辑(以下评论)
使用逻辑 ==
来查找单元格数组中的字符串是不安全的,因为使用此运算符会拆分字符串并比较构成它的每个字母,而不是 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 returns 这 2 个逻辑向量:
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} 中。
希望更清楚!
在 Matlab 中,如果我有一个字符串元胞数组,我如何检查第 3 行和第 1 列是否等于某个给定字符串,例如 'ABC'
?
例如,myArray(3,1) == 'ABC'
给我一个错误:
Undefined operator '==' for input arguments of type 'cell'.
Error in cw14 (line 19)
if myArray(3,1) == 'ABC'
那是因为您需要使用{大括号}才能访问元胞数组的内容。
使用(正括号)索引实际的 cell,在您的例子中它包含一个字符串。此外,为了检查字符串的存在,我建议使用 strcmp or maybe strfind.
因此使用这个:
strcmp(myArray{3,1},'ABC')
查看 here 以获取有关索引到元胞数组的信息。
编辑(以下评论)
使用逻辑 ==
来查找单元格数组中的字符串是不安全的,因为使用此运算符会拆分字符串并比较构成它的每个字母,而不是 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 returns 这 2 个逻辑向量:
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} 中。
希望更清楚!