matlab中 元胞数组的交集,比如a={1,2,[4,15],[5,23]},b={3,2,5,[4,15],0}

这两个交集怎么求?不用for 因为那个太慢了!我数据有点大!谢谢大神指导

matlab里求交的函数是intersect,可惜它只能对字符串类型的元胞数组进行求交,而你这个是double类型的,所以我们的思路就是把a、b转换成字符串类型的,然后利用intersect求交,结果再转回double:
>> a = { 1, 2, [ 4 15 ], [ 5 23 ] }
a =
[1] [2] [1x2 double] [1x2 double]
>> b = { 3, 2, 5, [ 4, 15 ], 0 }
b =
[3] [2] [5] [1x2 double] [0]
>> as = cellfun( @( ai ) num2str( ai ), a, 'UniformOutput', false )
as =
'1' '2' '4 15' '5 23'
>> bs = cellfun( @( bi ) num2str( bi ), b, 'UniformOutput', false )
bs =
'3' '2' '5' '4 15' '0'
>> cs = intersect( as, bs )
cs =
'2' '4 15'
>> c = cellfun( @( ci ) str2num( ci ), cs, 'UniformOutput', false )
c =
[2] [1x2 double]
>> celldisp( c )

c{1} =

2

c{2} =

4 15
我不好说这个会不会比你用for更快,如果你对性能要求很好,就只能用和C混编的技术了,用
C写一个专门对cell数组求交的mex函数,绝对比matlab快几十倍。来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答