许多人知道 MATLAB 向量化编程,少用 for 循环 可以提高代码运行效率,但关于代码紧凑化编程, arrayfun 与 bsxfun 两个重要函数却鲜有人能够用好,今天针对这两个函数举例说明其威力。
Matlab arrayfun
概述
arrayfun 是 Matlab 中的一个强大函数,它允许用户对数组中的每个元素应用一个指定的函数,并返回一个新的数组,该数组包含了函数对每个元素应用后的结果。这使得对数组进行逐元素操作变得非常灵活和方便,无需编写循环语句。
测试目的
本测试文档旨在展示 arrayfun 函数的多种巧妙用法,包括基本用法、匿名函数的应用、多维数组的处理以及与其他函数的结合使用,以全面理解其功能和效率。
- 先看下面两个基本操作
A = 1:5;
B = arrayfun(@(x) x^2, A);
disp(B);
A = -5:5;
B = arrayfun(@(x) x > 0, A);
disp(B);
这两个操作中,arrayfun 提供了便利的逐元素操作方式,但在处理大型数组时,直接利用 Matlab 的内置数组向量化操作(如 +, -, .*, ./ 等)通常会有更好的性能。
- 再看下面这个操作:
[J,I]=meshgrid(1:10);
al=arrayfun(@(ii,jj) integral2(@(u,v)sin(u).*sqrt(v),0,ii,0,jj),I,J);
这段代码在MATLAB环境中执行了一个二维数值积分的计算,具体地,它计算了函数
f ( u