HOWTO · MATLAB

在 MATLAB 中使用 mean() 函数获取数组的平均值

可以使用 MATLAB 中的 mean() 函数找到数组的平均值或平均值。

本页内容

使用 MATLAB 的 mean 函数可以计算向量的平均值,也可以沿矩阵的某个维度计算平均值。对于常见的二维矩阵,mean(A) 会返回每列的平均值;使用 mean(A,2) 则会返回每行的平均值。下方的向量示例显示结果 4,且已成功运行。

使用 MATLAB 的 mean 函数计算数组平均值

对于向量,将其作为输入传给 mean 即可。下面是一个完整、独立的示例,使用兼容 Octave 的语法,也适用于 MATLAB:

运行此示例:

values = [2, 4, 6];
average = mean(values);
disp(average)
4

对于矩阵 A,MATLAB 会沿第一个非单例维度计算 mean(A)。对于普通矩阵,该维度是维度 1,因此结果是一个行向量,其中包含各列的平均值。使用 mean(A,2) 可指定维度 2;结果是一个列向量,其中包含各行的平均值。结果中所选维度的长度会缩减为 1,其他维度则保持不变。

也可以指定输出类型。例如,mean(A,'double') 会在使用默认维度的同时请求 double 类型的输出;mean(A,2,'double') 则将按行计算与该输出类型结合起来。类型选项不会指定计算维度。

使用 sum 和除法计算数组平均值

平均值就是数值总和除以数值个数。若要计算矩阵所有元素的总体平均值,可使用 A(:) 将矩阵展开,再用 sum(A(:)) 除以 numel(A)。numel 会统计所有元素;length 返回最长维度的大小,因此通常不能用来代替矩阵元素总数。

若要计算各维度的平均值,应使用总和及与之匹配的计数。列平均值可写作 sum(A,1) ./ size(A,1):每列的总和除以行数。行平均值可写作 sum(A,2) ./ size(A,2):每行的总和除以列数。除数必须统计对应总和中所包含的数值个数。

这种手动计算方式有助于理解计算过程,也便于按需调整。日常计算时,使用 mean 能更直接地表达意图。

使用循环计算数组平均值

循环能清楚展示累加过程。在示例中,向量的总和是标量,列总和是行向量,行总和是列向量。按列计算的循环会逐行累加,再除以行数;按行计算的循环会逐列累加,再除以列数。

values = [2, 4, 6];
vectorTotal = 0;
for k = 1:numel(values)
    vectorTotal = vectorTotal + values(k);
end
vectorMean = vectorTotal / numel(values);

A = [1, 2; 3, 4; 5, 6];
columnTotals = zeros(1, size(A, 2));
for row = 1:size(A, 1)
    columnTotals = columnTotals + A(row, :);
end
columnMeans = columnTotals / size(A, 1);

rowTotals = zeros(size(A, 1), 1);
for column = 1:size(A, 2)
    rowTotals = rowTotals + A(:, column);
end
rowMeans = rowTotals / size(A, 2);

这些循环模式可作为学习用途的替代方法。对于向量,numel(values) 会统计所有元素。对于矩阵结果,计算列平均值时使用行数,计算行平均值时使用列数。日常计算使用 MATLAB 内置的 mean 更清晰。

如何选择计算方法

通常计算向量、列或行的平均值时使用 mean:维度参数能明确指定所需结果,也无需另行维护计数。需要展示或自定义算术过程时,可使用 sum 并配上与维度相符的除数。学习累加过程或需要对每个元素执行额外逻辑时,可使用循环。无论采用哪种方法,除数都应与总和所包含的数值相匹配。