2012-12-02 167 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