次の例を検討してください。
Jday = datenum('2007-01-01 00:00','yyyy-mm-dd HH:MM'):1:...
datenum('2009-12-31 23:00','yyyy-mm-dd HH:MM');
Jday2 = datenum('2008-01-01 00:00','yyyy-mm-dd HH:MM'):1:...
datenum('2010-12-31 23:00','yyyy-mm-dd HH:MM');
Data{1} = [Jday;1+(length(Jday)-1).*rand(1,length(Jday))]';
Data{2} = [Jday2;1+(length(Jday)-1).*rand(1,length(Jday))]';
Data{3} = [Jday;1+(length(Jday)-1).*rand(1,length(Jday))]';
for i = 1:length(Data);
d_nan{i} = floor(1+(length(Jday)-1).*rand(1,100));
end
for i = 1:length(Data);
a(i) = length(d_nan{i});
for ii = 1:a(i);
Data{i}(d_nan{i}(ii),2) = nan;
end
end
この例では、3 つのセル配列を含むセル配列 'Data' があります。各セル配列の最初の列には、2 番目の列の値のユリウス日が含まれています。各セル配列には多数の nan 値があります。各セル配列の nan 値を、その特定のユリウス日の他のセルの値の平均に置き換えたいと思います。3 つのセルが同時にデータを表示しないため、私の問題は複雑です (ただし、Data{1} と Data{3} は同じ日です)。3 つのセル間でユリウス日が同一である場合、この問題は以下を使用して解決できます。 isnan を使用して nan の位置を見つけ、それらの行を (他のセルの) 他の行の nanmean で置き換えます。
誰かがこの問題に取り組む効果的な方法を提案できますか? お時間をいただきありがとうございます