【问题标题】:For loop to average over individual time points MatlabFor循环以平均各个时间点Matlab
【发布时间】:2016-08-28 10:18:03
【问题描述】:

我在 Matlab 中有一个 21x2 的向量,如下所示:

A = [0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5;
     0   0   0   0   0   1   1   1   1   1   1   0   0   0   0   0   1   1   1   1   1]'; 

第一行中的每个元素对应于第二行中的0 或1。我需要将0's 和1's 的每一个集合视为块,以便我可以挑选出元素,这样我就有一个包含1 块的所有first 元素的向量然后是另一个包含1 块的所有 second 元素的向量,依此类推,直到我将所有元素分离出来。

所以例如vector1=[1.0 2.1], vector2=[1.1 2.2] 等等等等。

这是因为我需要对块之间的各个点进行平均,这样我就有了例如avg_vector1, avg_vector2, avg_vector3...等。

到目前为止,我一直在尝试编写一个循环来执行此操作,但我已经可以说它不会那么高效并且可能不会每次都有效,因为我必须为每个 j 提供一个 if (见下文)并且“j的数量”并不是真正固定的,有时块可能更长,有时可能更短。

j=1;
for i=1:size(A,1)
 if A(i,2)==1
    if j==1 
        vector1(i)=A(i,1);
        j=j+1; %j is acting as a counter for the "size" of the block of 0's and 1's
    if j==2
        vector2(i)=A(i,1);
    **incomplete**

有谁知道如何更优雅、更简单地做到这一点?

谢谢

【问题讨论】:

  • 向量总是以零开头吗?你知道你将拥有的块数(总是 2 个)吗?
  • 是的,每次都以0开头
  • 在您的示例中,两个 1 块的大小不同(第一个有 6 个元素,第二个有 5 个)。这是一个错字,还是会发生在您的数据向量中?然后,您不必创建多个向量,因为mean 可以沿给定维度进行操作
  • 不,这不是错字,它们的大小不同!
  • 那么您如何处理尺寸不同的事实?您是否只从最长的块中获取与最短块中的值一样多的值?

标签: arrays matlab sorting for-loop average


【解决方案1】:

(希望)正确的版本:

M = logical(A(:, 2));
is_start = [M(1); ~M(1:end-1) & M(2:end)];
is_start = is_start(M); 
A_valid = A(M, 1);
group_idx = cumsum(is_start); 
group_start_idx = find(is_start);
sub_idx = (1:numel(is_start))' - group_start_idx(group_idx)+1;
means = accumarray(sub_idx, A_valid, [], @mean);

可能有一种稍微简洁的方法可以减少一两个步骤,但这应该可行。

带回家学习:更频繁地使用cumsum!

[原错误答案已删除]

【讨论】:

  • 我认为 OP 想要的是 2 个块元素的平均值(即第一个块的元素 1 和第二个块的元素 1 等等)。所以你的group_idx 必须是[0.....0 1 2 3 4 5 6 0 ......0 1 2 3 4 5]。虽然很好地使用了 cumsum 和 accumarray,但我绝对应该更多地使用它
  • 是的@BillBokeey 是正确的,我想要在块上逐个元素地平均,所以平均第一个元素,然后平均第二个元素,平均第三个元素等等!
  • @dan-man 感谢这项工作!现在我将尝试应用到向量更长一点的实际数据!
  • @dan-man 您应该从中删除旧答案,现在您有了正确的解决方案。
  • 我想不出比这更不相关的信息了。 (参考评论)
猜你喜欢
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 2017-11-09
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多