すべての行列の平均を求めたい:
Data =(Data {1} + ...... + Data {n})/ n)ここで、Data{n}はm*nの行列です。
どうもありがとうございました
まず、セル配列を3D配列に変換してから、次のように平均をとることができます。
tmp = cat(3,Data{:}); %# catenates the data, so that it becomes a m*n*z (or m*1*n)
averageData = mean(tmp,3); %# takes average along 3rd dimension
注:この方法でメモリの問題が発生し、変数を保持する必要がない場合はData
、に置き換えることができtmp
、Data
すべてが正常に機能します。
または、ifData
は単にam*n数値配列です
averageData = mean(Data,2);
セル配列が非常に大きい場合は、メモリ使用量のため、上記のソリューションを避けたい場合があります。mtimesx
次に、MatlabCentralから入手できるユーティリティを使用することをお勧めします。
N = length(Data);
b = cell(N,1);
b(:) = {1};
averageData = mtimesx(Data,b)/N;
上記の例では、データは線状のセル配列であると想定しました。私は個人的に使用したことはありませんmtimesx
。この解決策はそこから来ており、タイミングの問題についても説明されています。
お役に立てれば。
A。