我在数据文件中有两个带有字符串的向量(大小不同)。 我想在每个向量中找到两个(或更多)相似字符串的位置。 E.g:
a=['str1', 'str2', 'str3', 'str4', 'str5', 'str6'];
b=['str3', 'str1', 'str4', 'str4'];
我想输出如下:
b(1) corresponds to a(3)
b(2) corresponds to a(1)
b(3) corresponds to a(4)
b(4) corresponds to a(4)
有可能吗?
答案 0 :(得分:2)
如果将字符串存储在单元格数组中,则可以这样执行:
>> a = {'str1', 'str2', 'str3', 'str4', 'str5', 'str6'};
>> b = {'str3', 'str1', 'str4', 'str4'};
>> result = cellfun(@(x) find(strcmp(a, x)), b, 'UniformOutput', false);
result =
[3] [1] [4] [4]
注意:结果是一个单元格数组。因此,result{i} == j
表示b(i)
对应a(j)
。如果b(i)
中未找到a
,则result{i}
为空。
答案 1 :(得分:2)
另一种方法是使用 ismember 命令,该命令将返回一个逻辑数组,指示数组 b 的元素是否是数组 a 的成员。它还可以返回一个向量,该向量指示 a 中 b 元素的位置。使用您的示例:
[ismem,idxa]=ismember(b,a)
返回结果
ismem =
1 1 1 1
idxa =
3 1 4 4
所以我们看到 b 的每个成员都在 a 中(由于ismem向量是全部的),我们看到 a 是idxa向量中 b 的元素。 (请注意,如果 b 的元素不在 a 中,则两个向量中都会有一个零元素。)