2014-05-02 54 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

相關問題