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/falseM 大小相同,它告诉您我们是否发现 M 中该行索引的单词与您的匹配正在寻找。因为我们只想知道那个词在哪里,所以我们可以抑制第一个输出。 idx 告诉您在第 找到了该词。

当我们调用这个函数时,我们得到:

idx = 

3

这意味着第三行包含您要查找的字词。但是,如果您坚决使用 find,请考虑将 ismemberfind:

结合使用
W = 'have';
idx = find(ismember(M, W, 'rows'));

idx = 

3

但是,上述方法的优点是它会找到 所有位置 与您要查找的特定单词相匹配。