【问题标题】:Calculating sum of array elements and reiterate for entire array in MATLAB计算数组元素的总和并在MATLAB中为整个数组重复
【发布时间】:2017-11-06 11:12:55
【问题描述】:

我有一个大小为 7812x1 的向量 A,并想计算长度为 21 的固定窗口的总和(即 372 个块)。应该重申这一点,以便输出应该返回一个大小为 372x1 的向量。

我有t=7812p=372w=21

for t=1:p
   out = sum(A((t*w-w+1):(t*w)));
end

但是,此代码不起作用。我的想法是((t*w-w+1):(t*w)) 部分允许像滚动窗口这样的东西。窗口的长度是 21,所以不需要用变量来表示 is,但我认为它保持了一定的灵活性。

我已经看到可能相关的问题(例如向量的部分和),但我不确定这是否会产生所需的输出。

【问题讨论】:

    标签: arrays matlab loops rolling-sum


    【解决方案1】:

    整形为矩阵,使A的每个块都是一列,并计算每一列的总和:

    result = sum(reshape(A, w, []), 1);
    

    【讨论】:

    • 我想在我的情况下它应该是总和而不是平均值,以便获得与@Leander Moesinger 相同的结果。否则,我取每个块的平均值,对吗?但是,该解决方案很直观并且运行良好。非常感谢!
    • @Joe 是的,总和而不是平均值,对不起。已更正
    【解决方案2】:

    按照您的想法使用滚动/移动窗口(需要 Matlab 2016a 或更高版本):

    t = 7812; w = 21; % your parameters
    A = rand(t,1); % generate some test data
    
    B = movsum(A,w); % the sum of a moving window with width w
    out = B(ceil(w/2):w:end); % get every w'th element
    

    【讨论】:

      猜你喜欢
      • 2021-07-19
      • 1970-01-01
      • 2013-08-20
      • 2021-10-12
      • 2021-06-05
      • 2022-09-30
      • 2020-07-10
      • 2017-07-15
      • 1970-01-01
      相关资源
      最近更新 更多