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 搭配符合維度的除數。若要學習累加的運作方式,或計算中還包含逐元素邏輯,可使用迴圈。無論採用哪種方法,除數都必須對應總和所包含的數值。