1

ビニング平均を実行しようとしています。私はコードを使用しています:

Avg = mean(reshape(a,300,144,27));
AvgF = squeeze(Avg);

最後の行は、大きさが 1 の次元を取り除きます。

ご覧のとおり、平均点は 300 点を超えています。ポイントの総数が 144*300 の倍数に等しくない場合を除いて、問題なく動作します。

ポイントの総数が 144*300 の倍数でない場合でも、このビニング平均を機能させる方法はありますか?

編集:私の質問が紛らわしかったら申し訳ありません。明確にするために...

43200 行 27 列のファイルがあります。一度に 300 行をビニングして平均化しています。つまり、最終的にサイズが144 行 27列の行列が残ります。

上記のコードは、正確に 43200 行ある場合にのみ機能します。場合によっては、43199、43194 などがあります。総行数が 300 (ビン サイズ) の倍数である場合、reshape 関数が機能します。行の総数が 300 の倍数でない場合に、このビニング平均を機能させる方法はありますか?

4

1 に答える 1

2

私は今、問題をよりよく理解していると思います...

ファイルaから読み取られたデータ (サイズがN 行 27列、N が理想的には 43,200 の場合) の場合、次のことを行う必要があると思います。

nRemove = rem(size(a,1),300);  %# Find the number of points to remove
a = a(1:end-nRemove,:);        %# Trim points to make an even multiple of 300
Avg = mean(reshape(a,300,[],27));
AvgF = squeeze(Avg);

これにより、行数が300の倍数になるようにポイントが削除されaます。その後、形状変更と平均が機能するはずです。RESHAPE[]の呼び出しで使用していることに注意してください。これにより、列の数を把握できます。

于 2009-11-24T16:23:23.827 に答える