matlab中 元胞数组的交集,比如a={1,2,[4,15],[5,23]},b={3,2,5,[4,15],0}
答案:2 悬赏:0 手机版
解决时间 2021-12-31 09:13
- 提问者网友:不爱我么
- 2021-12-30 23:24
这两个交集怎么求?不用for 因为那个太慢了!我数据有点大!谢谢大神指导
最佳答案
- 五星知识达人网友:低音帝王
- 2021-12-31 00:44
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快几十倍。
>> 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快几十倍。
全部回答
- 1楼网友:老鼠爱大米
- 2021-12-31 01:29
支持一下感觉挺不错的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯