HOWTO · MATLAB
MATLAB の mean() 関数で配列の平均を求める
MATLAB の mean()関数を使用して、配列の平均または平均を見つけることができます。
このページの内容
ベクトルの平均や行列の各次元に沿った平均を求めるには、MATLAB の mean 関数を使います。一般的な2次元行列では、mean(A) は各列の平均を返します。各行の平均を求めるには mean(A,2) を使います。以下のベクトル例は 4 を表示し、正常に実行されています。
MATLAB の mean 関数で配列の平均を求める
ベクトルの平均を求めるには、入力としてそのベクトルを mean に渡します。次の自己完結した例は Octave と互換性のある構文で、MATLAB のコードとしても有効です。
この例を実行します。
values = [2, 4, 6];
average = mean(values);
disp(average)
4
行列 A に対して mean(A) を実行すると、MATLAB は最初の非単一次元に沿って計算します。通常の行列ではそれが次元1なので、結果は各列の平均を格納した行ベクトルになります。次元2を指定するには mean(A,2) を使います。これは各行の平均を格納した列ベクトルを返します。結果では指定した次元が1になり、もう一方の次元は維持されます。
出力型も指定できます。たとえば mean(A,'double') は既定の次元に沿って計算し、出力を double 型にします。mean(A,2,'double') は行ごとの計算とその出力型を組み合わせます。型のオプションは計算する次元を指定するものではありません。
sum と除算で配列の平均を求める
平均は、値の合計を値の個数で割ったものです。行列の全要素を対象に1つの平均を求めるには、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) で全要素数を数えます。行列の列平均には行数を、行平均には列数を使います。通常の計算では、組み込みの mean のほうが明快です。
方法の選び方
一般的なベクトル、列、または行の平均には mean を使います。次元を指定すれば求める結果が明確になり、個数を別途管理する必要もありません。計算過程を示したり調整したりする場合は、次元に合った除数と sum を使います。蓄積の仕組みを学ぶ場合や、各要素に対する追加処理がある場合は、ループが役立ちます。どの方法でも、除数は合計に含めた値の個数に合わせてください。