• Matlab高级教程_第四篇:Matlab高级函数_关键词:arrayfun


    % 定义一个句柄并用这个句柄求值
    h = @sin; 
    h(3)
    % % 命令窗口返回内容
    % h(3)
    % ans =
    %     0.1411
    
    
    %定义一个完整句柄,@参数+表达式的形式,并给句柄传参
    h1 = @(x)mean(x);
    x = [1 2 3 4 5];
    h1(x)
    % % 命令窗口返回内容
    % h1(x)
    % ans =
    %      3
         
    
    %arrayfun的简单应用
    h1 = @(x)mean(x);
    x = [1 2 3 4 5];
    % 可以用句柄的形式传入第一个形参位置,也可以直接@句柄内容,这两个是等价的
    arrayfun(@(x)mean(x),x)
    arrayfun(h1,x)
    % % 命令窗口返回内容
    % ans =
    %      1     2     3     4     5
    % ans =
    %      1     2     3     4     5
    
    
    %arrayfun对Name,value的要求(只举例格式化形式'UniformOutput')
    x = [1 2 3 4 5];
    % 如果选择为false以元胞的形式返回值
    arrayfun(@(x)mean(x),x,'UniformOutput',false)  
    % 如果选择为true以数组的形式返回值
    arrayfun(@(x)mean(x),x,'UniformOutput',true)  
    % % 命令窗口返回内容
    % ans =
    %   1×5 cell 数组
    %     {[1]}    {[2]}    {[3]}    {[4]}    {[5]}
    % ans =
    %      1     2     3     4     5
    
    % arrayfun对于提升运算效率的帮助
    % 不采用arrayfun形式的运算
    tic;
    x = magic(3000)*magic(3000);
    toc;
    % 时间已过 3.125284 秒。
    
    % 采用arrayfun形式的运算
    tic;
    arrayfun(@(n)magic(n)*magic(n),3000,'UniformOutput',false);
    toc;
    % 时间已过 3.125284 秒。
    

    我们分采用运算的时候,第二遍比第一遍快,主要是MATLAB的内存预分配机制。

    注意采用arrayfun值是标量形式必须选择false

    arrayfun主要是为了打开并行运算库而设计

    我们打开并行运算

    % arrayfun对于提升运算效率的帮助
    % 不采用arrayfun形式的运算
    tic;
    x = magic(5000)*magic(5000);
    toc;
    % 时间已过 14.077466 秒。
    
    % 采用arrayfun形式的运算
    tic;
    arrayfun(@(n)magic(n)*magic(n),5000,'UniformOutput',false);
    toc;
    % 时间已过 13.423996 秒。
    

    我们发现运算效率提升不太明显,因为arrayfun针对标量的运算方式,如果对于像魔方矩阵,可以用meshgrid分解的方式提升更明显 

  • 相关阅读:
    第九次训练赛
    什么是 Catalan 数列以及其应用
    Python pip 安装与使用
    HDU 1179:Ollivanders: Makers of Fine Wands since 382 BC.
    身份证信息
    流量暴增,掌门教育如何基于 Spring Cloud Alibaba 构建微服务体系?
    从零入门 Serverless | 函数计算的可观测性
    如何管理越来越多的 operator?OLM 给你答案
    Fluid: 让大数据和 AI 拥抱云原生的一块重要拼图
    SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可监控)
  • 原文地址:https://www.cnblogs.com/noah0532/p/9923661.html
Copyright © 2020-2023  润新知