2012-12-02 168 views
2

我想比較兩個單元格數組,1x160(a)和80x1(b)。我的單元格數組由包含多個字符串的單元格組成。我想比較每個字符串,看看它們是否相等,然後如果它們相等,則插入新數組,否則插入0。我找不到任何功能。我嘗試了'isequal','strfind'等等。所有這些給我下一個錯誤信息:比較matlab中的兩個單元格數組元素

如果任何輸入參數是電池陣列,首先必須是一個字符串的 單元陣列和第二必須是一個字符數組。

這是我的代碼!

function [inter]=Intersect2(a,b) 
int=cell(0); 
b2=[b;b]; 

for i=1:length(a) 
    if a{i,1}==b2{i,1}(1) (or 'isequal','strfind') 
     int{i}=a{i}; 
    else 
     int{i}=0; 
    end  
end 
+0

爲了澄清,您並未試圖找到兩個單元陣列的[交集](http://en.wikipedia.org/wiki/Intersection_(set_theory)),而是在相同的索引之間進行匹配。正確? – nicktruesdale

+0

準確!!!!!!!!! – Sermilion

回答

8

有很多方法來比較字符數組,其中之一是strcmp。我們將使用cellfun以避免循環。

a = {'Dude', 'I', 'am', 'a', 'moose'}; 
b = {'Well', 'I', 'am', 'a', 'mouse'}; 

index = cellfun(@strcmp, a, b); 

這將在ba每個元素對進行比較的相應元素,返回一個邏輯陣列index1當元件匹配和0當他們沒有。

使用此指定匹配的值:

int = cell(1, length(a)); 
int(index) = a(index); 

INT =

[] '我' '是' 'A'[]

您可以擴展這個概念如果您願意,可以找到設定的交叉點。

+2

字符串的絕佳選擇。 – jerad

+0

這是一個好方法,但如果我的數組大小不同,該怎麼辦? – Sermilion

+0

這取決於。如果您的索引與索引匹配,則必須截斷一個或填充另一個 - 無論如何,額外的數據都沒有意義。如果你想匹配其他方式,比如交叉點,你可能會使用'strcmp',但你一定需要新的代碼。 – nicktruesdale