【问题标题】:How do I make sums of sumatrixes in MATLAB without cycle?如何在没有循环的情况下在 MATLAB 中对 sumatrixes 求和?
【发布时间】:2023-04-02 15:37:01
【问题描述】:

我有一个大矩阵(时间 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]

【问题讨论】:

  • 你能举个例子说明你的数据和你想要的结果吗?
  • 我计算了一个长 EEG 信号的频谱图,我想将它沿时间维度求和,因此我得到信号的加权频谱 - 但我想每 1000 个样本求和(分段),因为接下来的信号处理。

标签: matlab matrix sum


【解决方案1】:

假设您有一个包含 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

您也可以在一行中完成所有操作:

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

【讨论】:

    猜你喜欢
    • 2013-06-08
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    相关资源
    最近更新 更多