2014-05-02 30 views
0

我有两个向量(不同大小)在数据文件中带有字符串。 我想找到每个这些向量中两个(或更多)类似字符串的位置。 例如: -如何在matlab中查找两个或多个存储在两个不同向量中的相等字符串

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) 

这可能吗?

回答

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)。如果在a中找不到b(i),则result{i}为空。

+0

输出是“太多的投入” – user3270686

+0

你运行上述所有三个命令?什么是你的Matlab版本? –

+0

MATLAB Version 7.0.1.24704(R14)Service Pack 1,2004 – user3270686

2

一种替代方法是使用ismember命令,该命令将返回逻辑值的指示数组b的元素是否是阵列一个的成员的阵列。它还可以返回一个向量,该向量指示在a中的元素b被发现。使用你的例子:

[ismem,idxa]=ismember(b,a) 

返回结果

ismem = 
1  1  1  1 
idxa = 
3  1  4  4 

所以我们看到的b每个成员都是在一个(由于ismem向量为全1),我们看到a是来自idxa载体的那个元素b。 (请注意,如果b已经不在一个的元素,则会有一个零元素在这两个载体中。)

+0

这是一个很好的做法,可以在第二个输出中检查0作为assert(all(idxa〜= 0),'')中的元素丢失或删除0s'idxa(idxa == 0)= [ ];'在用'idxa'进一步操作之前。 – yuk

相关问题