有一个char矩阵。每行都是一个单词。所有单词/行的长度都相同。
无论如何使用find()
函数在此矩阵中找到目标词?
说出M=[o k a y; g o o d; h a v e];
目标字W='have';
是否有任何功能可以在W
中搜索M
并返回行索引?
当我尝试index = find(isequal(W,M))
和index = find(isequal(W,M(:,:)))
时,它们都返回空数组。
我知道我可以使用线性搜索,即逐行比较,只是想知道是否有内置函数来解决这个问题。谢谢!
答案 0 :(得分:1)
您需要将M
与字符串进行比较。我假设M包含单个字符如下:
M=['o' 'k' 'a' 'y'; 'g' 'o' 'o' 'd'; 'h' 'a' 'v' 'e']
和W='have'
因此,为了将M的每一行与W进行比较,您需要使用strcmp
。为此,您需要M
作为单元格数组。您可以使用M
将mat2cell
的每一行转换为单元格数组。
equalRows=strcmp(W, mat2cell(M,ones(1,size(M,1)),size(M,2)));
% Answer
equalRows =
0
0
1
在上面的输出中使用find
命令来获取索引。
答案 1 :(得分:1)
另一种方法是使用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
但是,上述方法的优势在于它会找到与您正在寻找的特定单词匹配的所有位置。