2012-08-02 91 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