マトリックスはどうですか?
Karthik V が示唆するように、
mean(x(~isnan(x)))
ベクトルで機能します。ただし、n 行 m 列の行列があり、場合によっては NaN を破棄して行/列単位の平均を計算したい場合は、for ループを実行する必要があります。
サンプルシナリオ
次の形式のデータ マトリックスを想像してください。
A = [1 0 NaN; 0 3 4; 0 NaN 2]
A =
1 0 NaN
0 3 4
0 NaN 2
歩留まりmean(A(~isnan(A)))
:
ans =
1.4286
これは、論理インデックスが行列を効果的にベクトルに「フラット化」するためです。
ループ ソリューション (列ごとの平均)
列ごとの平均を計算すると仮定すると、ループ ソリューションは次のようになります。
% Preallocate resulting mean vector
nCols = size(A, 2);
mu = zeros(1, nCols);
% Compute means
for col = 1:nCols
mu(col) = mean(A(~isnan(A(:, col)), col));
end
その結果:
mu =
0.3333 1.5000 3.0000
ループ ソリューション (行単位の平均)
行ごとの平均を計算すると仮定すると、ループ ソリューションは次のようになります。
% Preallocate resulting mean vector
nRows = size(A, 1);
mu = zeros(nRows, 1);
% Compute means
for row = 1:nRows
mu(row) = mean(A(row, ~isnan(A(row, :))));
end
その結果:
mu =
0.5000
2.3333
1.0000