zoukankan      html  css  js  c++  java
  • 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等函数, 上述函数皆可以仿照本文方法重新编写加快程序运行速度. 并且, 程序短≠运行快

  • 相关阅读:
    ##3.Keystone 验证服务--openstack
    gitlab一键安装+配置(备份+LADP认证)
    【hexo】03config文件配置详解
    【hexo】01安装
    第6章 linux的文件权限与目录配置
    ubuntu14.04安装Anaconda
    ubuntu14.04安装opencv-python
    ubuntu14.04配置face_recognition环境
    php7 安装时需求的依赖包
    删除包的时候因为依赖关系导致失败的解决方法
  • 原文地址:https://www.cnblogs.com/common376/p/5824649.html
Copyright © 2011-2022 走看看