• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

matlab中集合运算函数——解析 - common&Y

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

matlab中集合运算函数——解析

1. unique函数

 对于unique(A,\'rows\')而言, 速度较慢, 例: 

A = randi(10,1000,100000); %生成10以下数字的1000×100000的矩阵

 第一种方式: 

tic
[a1 b1 c1] = unique(A,\'rows\');
toc

       运行时间  t=2.656930s;

 第二种方式: 

tic
t = max(max(A));
B = zeros(size(A,1),1);
for i = 1:size(A,2)
    B = B*(t+1) + A(:,i);
end
[a2 b2 c2] = unique(B);
toc

       运行时间  t=0.369617s;

 运行时间上第二种方法比第一种减少了10倍, 且得到了相同的结果. 

2. union函数

  参照程序: 

A = randperm(8000000,7800000);
B = randperm(5000000,4300000);
%% 第一种方法
tic
C = union(A,B);
toc       %运行时间 t=1.360395s
%% 第二种方法
tic
b = zeros(1,max([A,B]));
b([A B]) = 1;
D = find(b);
toc       %运行时间 t=0.558845s

  可知第二种方式比使用函数运行时间更短. 

3. setdiff函数

  参照程序: 

A = randperm(8000000,7800000);
B = randperm(5000000,4300000);
%% 第一种方法
tic
C = setdiff(A,B);  %意义为 A-B
toc     %运行时间 t = 3.845448s
%% 第二种方法
tic
a = max(A);
b = zeros(1,a);
b(A) = 1;
b(B(find(B<(a+1)))) = 0;
D = find(b);
toc     %运行时间 t = 0.571202s

 可知第二种方式比使用函数运行时间更短

综上所述, Matlab中有关集合运算的函数并不一定运行快, 比如unique、union、setdiff、setxor、intersect、ismember等函数, 上述函数皆可以仿照本文方法重新编写加快程序运行速度. 并且, 程序短≠运行快


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi编写COM+简介(转)发布时间:2022-07-18
下一篇:
Delphi D10.X 开发过程中莫名多出FireDAC.VCLUI.Wait引用的问题发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap