MATLAB 在矩阵中找到一行字符
MATLAB find a row of chars in a matrix
有一个字符矩阵。每一行都是一个词。所有 words/rows 的长度都相同。
是否可以使用 find()
函数在此矩阵中找到目标词?
说M=[o k a y; g o o d; h a v e];
一个目标词W='have';
有没有在M
和return行索引中搜索W
的函数?
当我尝试 index = find(isequal(W,M))
和 index = find(isequal(W,M(:,:)))
时,它们都是 return 空数组。
我知道我可以使用线性搜索,即逐行比较,只是想知道是否有内置函数可以解决这个问题。谢谢!
您需要将 M
与字符串进行比较。我假设 M 包含如下单个字符:
M=['o' 'k' 'a' 'y'; 'g' 'o' 'o' 'd'; 'h' 'a' 'v' 'e']
和W='have'
所以为了将M的每一行与W进行比较,你需要使用strcmp
。为此,您需要 M
成为元胞数组。您可以使用 mat2cell
.
将 M
的每一行转换为元胞数组
equalRows=strcmp(W, mat2cell(M,ones(1,size(M,1)),size(M,2)));
% Answer
equalRows =
0
0
1
在上面的输出上使用 find
命令获取索引。
另一种方法是使用 ismember
。假设 M
是一个你定义的字符数组,你会这样做:
W = 'have';
[~,idx] = ismember(M, W, 'rows');
第一个输入是定义的字符数组,第二个输入是我们要搜索的字符串,我们选择'rows'
作为标志,因为我们要按行搜索。每个词都定义在一行中。第一个输出是 true/false
与 M
大小相同,它告诉您我们是否发现 M
中该行索引的单词与您的匹配正在寻找。因为我们只想知道那个词在哪里,所以我们可以抑制第一个输出。 idx
告诉您在第 行 找到了该词。
当我们调用这个函数时,我们得到:
idx =
3
这意味着第三行包含您要查找的字词。但是,如果您坚决使用 find
,请考虑将 ismember
与 find
:
结合使用
W = 'have';
idx = find(ismember(M, W, 'rows'));
idx =
3
但是,上述方法的优点是它会找到 所有位置 与您要查找的特定单词相匹配。
有一个字符矩阵。每一行都是一个词。所有 words/rows 的长度都相同。
是否可以使用 find()
函数在此矩阵中找到目标词?
说M=[o k a y; g o o d; h a v e];
一个目标词W='have';
有没有在M
和return行索引中搜索W
的函数?
当我尝试 index = find(isequal(W,M))
和 index = find(isequal(W,M(:,:)))
时,它们都是 return 空数组。
我知道我可以使用线性搜索,即逐行比较,只是想知道是否有内置函数可以解决这个问题。谢谢!
您需要将 M
与字符串进行比较。我假设 M 包含如下单个字符:
M=['o' 'k' 'a' 'y'; 'g' 'o' 'o' 'd'; 'h' 'a' 'v' 'e']
和W='have'
所以为了将M的每一行与W进行比较,你需要使用strcmp
。为此,您需要 M
成为元胞数组。您可以使用 mat2cell
.
M
的每一行转换为元胞数组
equalRows=strcmp(W, mat2cell(M,ones(1,size(M,1)),size(M,2)));
% Answer
equalRows =
0
0
1
在上面的输出上使用 find
命令获取索引。
另一种方法是使用 ismember
。假设 M
是一个你定义的字符数组,你会这样做:
W = 'have';
[~,idx] = ismember(M, W, 'rows');
第一个输入是定义的字符数组,第二个输入是我们要搜索的字符串,我们选择'rows'
作为标志,因为我们要按行搜索。每个词都定义在一行中。第一个输出是 true/false
与 M
大小相同,它告诉您我们是否发现 M
中该行索引的单词与您的匹配正在寻找。因为我们只想知道那个词在哪里,所以我们可以抑制第一个输出。 idx
告诉您在第 行 找到了该词。
当我们调用这个函数时,我们得到:
idx =
3
这意味着第三行包含您要查找的字词。但是,如果您坚决使用 find
,请考虑将 ismember
与 find
:
W = 'have';
idx = find(ismember(M, W, 'rows'));
idx =
3
但是,上述方法的优点是它会找到 所有位置 与您要查找的特定单词相匹配。