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

如题所述

第1个回答  2019-04-16
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快几十倍。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网