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

有没有人在啊,想请教下,matlab中 元胞数组的交集,比如a={1,2,[4,15],[5,23]},b={3,2,5,[4,15],0}
最新回答
时间枯萎

2024-05-02 04:54:48

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快几十倍。