部分的に削減したい大きな行列 (時間 x 周波数) があります。1000 行 (時間サンプル) ごとに合計して、頻度情報を保持したいのですが、これは一種のセグメンテーションです。
MATLABでサイクルなしでそれを行う方法はありますか?
より小さな例:
M=[1 2 3; 2 3 4; 5 8 7; 5 6 7; 1 2 3; 1 2 4];
2行ごとに合計したいので、次のようになります。
[3 5 7; 10 14 14; 2 4 7]
N行とM列の行列があり、すべてのR行を合計したいとします(NはRで割り切れます)。
>> mat = [1 2 3; 2 3 4; 5 8 7; 5 6 7; 1 2 3; 1 2 4]
mat =
1 2 3
2 3 4
5 8 7
5 6 7
1 2 3
1 2 4
>> [N, M] = size(mat); %=> [6, 3]
>> R = 2;
以下では、R行のグループを合計できます。
>> res = reshape(mat, R, [])
res =
1 5 1 2 8 2 3 7 3
2 5 1 3 6 2 4 7 4
>> res = sum(res)
res =
3 10 2 5 14 4 7 14 7
>> res = reshape(res, [], M)
res =
3 5 7
10 14 14
2 4 7
すべてを1行で実行することもできます。
>> reshape(sum(reshape(mat, R, [])), [], M)
ans =
3 5 7
10 14 14
2 4 7