2012-08-02 93 views
1

我有一個大矩陣(時間x頻率),我想部分減少。我想總計每1000行(時間樣本)一起保留頻率信息,這是一種分割。如何在沒有循環的情況下在MATLAB中創建sumatrixes的總和?

有什麼辦法可以在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] 
+0

你可以給你的數據的一個例子,你想要得到的結果是什麼呢? – cyang 2012-08-02 22:57:11

+0

我已經計算了一個長EEG信號的譜圖,並且我想按照時間維度對它進行求和,因此我得到了信號的加權譜 - 但是由於下一個信號處理,我想對每1000個樣本進行求和(分割)。 – user1572660 2012-08-03 08:30:05

回答

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; 

以下將允許您將su M組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 

你也可以做的一切在同一行:

>> reshape(sum(reshape(mat, R, [])), [], M) 
ans = 
    3  5  7 
    10 14 14 
    2  4  7