matlab 三维矩阵向量化,向量化 - MATLAB & Simulink - MathWorks 中国

数组运算

数组运算符对数据集中的所有元素执行相同的运算。这些类型的运算用于重复计算。例如,假设您通过记录各圆锥体的直径 (D) 和高度 (H) 来收集这些圆锥体的体积 (V)。如果您只收集一个圆锥体的信息,则可以只计算该圆锥体的体积:

V = 1/12*pi*(D^2)*H;

现在,收集 10,000 个圆锥体的信息。向量 D 和 H 均包含 10,000 个元素,并且您需要计算 10,000 个体积。在绝大多数编程语言中,您需要设置类似于以下 MATLAB 代码的循环:

for n = 1:10000

V(n) = 1/12*pi*(D(n)^2)*H(n));

end

借助 MATLAB,您可以使用与标量情形类似的语法对每个向量元素执行计算:

% Vectorized Calculation

V = 1/12*pi*(D.^2).*H;

注意

在运算符 *、/ 和 ^ 之前放置句点 (.),将其转换为数组运算符。

借助数组运算符,您还能够组合不同维度的矩阵。这样自动扩展大小为 1 的维度有助于对网格创建、矩阵和向量运算等进行向量化处理。

假设矩阵 A 代表考试分数,各种行表示不同的班级。您需要计算每个班级的平均分数与各分数的差。使用循环,该运算如下所示:

A = [97 89 84; 95 82 92; 64 80 99;76 77 67;...

88 59 74; 78 66 87; 55 93 85];

mA = mean(A);

B = zeros(size(A));

for n = 1:size(A,2)

B(:,n) = A(:,n) - mA(n);

end

要执行该运算,一种更直接的方式是使用 A - mean(A),后者不需要使用循环并且速度明显更快。

devA = A - mean(A)

devA =

18 11 0

16 4 8

-15 2 15

-3 -1 -17

9 -19 -10

-1 -12 3

-24 15 1

即使 A 是一个 7×3 矩阵,mean(A) 是一个 1×3 向量,MATLAB 也会隐式扩展该向量,就好像其大小与矩阵相同一样,并且该运算将作为正常的按元素减法运算来执行。

根据操作数的大小要求,对于每个维度,各数组必须大小相同,或者其中一个为 1。如果满足该要求,则含有大小为 1 的数组的维度将扩展为其他数组中相应维度的大小。有关详细信息,请参阅基本运算的兼容数组大小。

并且,在您处理多维数据时,隐式扩展也有助于向量化操作。假设您要计算包含两个变量 x 和 y 的函数 F。

F(x,y) = x*exp(-x2 -

y2)

要在 x 和 y 向量中的每个点组合处计算该函数,您需要定义网格值。对于此任务,您应避免使用循环来循环访问点组合。在这种情况下,如果一个向量为列,而另一个向量为行,则当这些向量与数组运算符配合使用(例如 x+y 或 x-y)时,MATLAB 将会自动构造网格。在此示例中,x 是一个 21×1 向量,y 是一个 1×16 向量,因此该运算会通过扩展 x 的第二个维度和 y 的第一个维度来生成一个 21×16 矩阵。

x = (-2:0.2:2)'; % 21-by-1

y = -1.5:0.2:1.5; % 1-by-16

F = x.*exp(-x.^2-y.^2); % 21-by-16

如果您要显式创建网格,可以使用 meshgrid 和 ndgrid 函数。

你可能感兴趣的:(matlab,三维矩阵向量化)