
Hao B.
V1
2022/12/26阅读:39主题:重影
向量化计算(上)
向量化计算
相关函数
-
arrayfun | structfun | cellfun : 数组、结构体和元胞数组 -
spfun | cell2mat | splitapply | varfun | rowfun | groupsummary
限于篇幅,本文分为2部分。
ARRAYFUN函数
ARRAYFUN官方解读
-
将函数应用于每个数组元素 -
B = arrayfun(func,A1,...,An):将 func 应用于数组 A1,...,An 的元素,因此 B(i) = func(A1(i),...,An(i))。
ARRAYFUN举例
1个数组的情况
A = linspace(1, 10, 5);
fun =@(x) exp(x^2) * x;
Y = arrayfun(fun, A)
运行结果
Y =
1.0e+44 *
0.0000 0.0000 0.0000 0.0000 2.6881
多个数组的情况
% 2个不同数组作用在同个函数,命名时就得一样,比如“A”,而不是“A_1”和“A_2”
S(1).A = linspace(1, 10, 5); % 结构体
S(2).A = [2.1, 2.2, 4.5, 6, 7.1]; % 结构体
fun =@(x) exp(x.A .^ 2) .* x.A;
Y = arrayfun(fun, S, "UniformOutput", false)
运行结果
Y =
1×2 cell 数组
{[2.7183 1.2564e+05 7.5469e+13 9.4214e+26 2.6881e+44]} {[172.7659 278.2326 2.8033e+09 2.5867e+16 5.5468e+22]}
注意:ARRAYFUN函数应用在多个数组时,需要先定义结构体。但因不同数组都要作用于同一个函数,所以命名时不建议用A_1和A_2进行区分
也可以用来批量化绘图
A_1 = linspace(-5, -1, 500);
A_2 = linspace(1, 5, 500);
fun =@(x) sin(x.^2) .* cos(x);
B_1 = arrayfun(fun, A_1);
B_2 = arrayfun(fun, A_2);
s(1).X = A_1; s(1).Y = B_1;
s(2).X = A_2; s(2).Y = B_2;
hold on
m = @(x) plot(x.X, x.Y, "LineWidth", 1.2);
p = arrayfun(m, s);
p(1).Marker = "o";
p(2).Marker = "s";
hold off
运行结果
其他类似函数
使用方法和“ARRAYFUN”一样
STRUCTFUN官方解读
-
对标量结构体的每个字段应用函数 -
A = structfun(func,S) 将函数 func 应用于标量结构体 S 的每个字段,每次一个字段。
CELLFUN官方解读
-
对元胞数组中的每个元胞应用函数 -
A = cellfun(func,C) 将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞。
欢迎纠错。
作者介绍

Hao B.
V1