matlab里求交的函数是intersect,可惜它只能对字符串类型的元胞数组进行求交,而你这个是double类型的,所以我们的思路就是把a、b转换成字符串类型的,然后利用intersect求交,结果再转回double:>>a={1,2,[415],[523]}a=[1][2][1x2double][1x2double]>>b={3,2,5,[4,15],0}b=[3][2][5][1x2double][0]>>as=cellfun(@(ai)num2str(ai),a,'UniformOutput',false)as='1''2''415''523'>>bs=cellfun(@(bi)num2str(bi),b,'UniformOutput',false)bs='3''2''5''415''0'>>cs=intersect(as,bs)cs='2''415'>>c=cellfun(@(ci)str2num(ci),cs,'UniformOutput',false)c=[2][1x2double]>>celldisp(c)c{1}=2c{2}=415我不好说这个会不会比你用for更快,如果你对性能要求很好,就只能用和C混编的技术了,用C写一个专门对cell数组求交的mex函数,绝对比matlab快几十倍。