1

部分的に削減したい大きな行列 (時間 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]
4

1 に答える 1

2

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
于 2012-08-03T14:55:30.403 に答える