【问题标题】:How to block-average in a for-loop with non-uniform data lenght如何在数据长度不均匀的for循环中进行块平均
【发布时间】:2019-06-29 23:08:57
【问题描述】:

我是Matlab的新手,我需要估计一个向量中非均匀数据长度的平均值。我有一个带有标志列(一和零)、时间戳和我感兴趣的变量的矩阵。基本上,数据(来自仪器)在标志:零(参考值)中测量 N 时间,标志:在样本中测量 N 时间。 N 是可变的,但在 28-30 秒之间波动。

我需要实现的是为每个测量周期估计每个标志的平均值:零和标志:一个。

到目前为止我做了什么:

for i=1:numel(inlet)

if inlet(i)== 1; co2_0(i)=NaN; end

end

for i=1:numel(inlet)

if inlet(i)== 0; co2_1(i)=NaN; end

end

这基本上是在不满足条件(即零或一)时放置 NaN。

然后,我尝试做一个嵌套的 for/if 循环,但这是我无法估计平均值的部分

for i = 1:1:length(inlet)

if inlet (i) == 1
    co2_avg(i) = co2_1 (i);
end


for j=1:length(co2_avg)
    co2_mu (j) = mean(co2_avg);
end

end

感谢任何帮助

【问题讨论】:

  • 目前还不清楚你想要的平均值。如果在第 1 列为 0 或 1 时只想要第 3 列的平均值,则可以执行 m0 = mean( X( X(:,1) == 0, 3 ) )m1 = mean( X( X(:,1) == 1, 3 ) )...
  • 嗨 Wolfie,是的,这是第 3 列,您共享的代码的想法正是我所需要的。但这会根据条件给出零或一时所有数据的平均值。我没有的是 for 循环来移动每 29 个数据点(1 到 0 之间的数据点数)。
  • “我需要的那种但是...”?这是否解决了您的问题或仍有未解决的问题?
  • 还有块平均的部分。假设矩阵是 3 列和 116 行。那是“一”的2个周期和“零”的2个周期。那么,最终的结果应该是 2 个零循环和 1 个循环的平均值的 4 个值
  • Edit 你的问题包括minimal reproducible example。尝试解释您的描述非常困难,如果您仅提供一个小示例和预期结果会更清楚。

标签: matlab for-loop moving-average


【解决方案1】:
  1. 就像 Wolfie 说的,你可以在任何地方简单地使用 X(X(:,1)==1, 3) 而不是 X(:,3),只对第一列中有 1 的那些进行平均,对于 0 也是如此。

  2. 如果要在忽略 NaN 值的情况下计算平均值,则应使用 nanmean 而不是均值。

(一般来说,Matlab中大多数简单函数都有一个“忽略NaN”的等效函数:nanmin、nanmax、nanstd等)

【讨论】:

  • 警告:所有这些功能都需要统计和机器学习工具箱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
  • 2023-01-09
  • 2013-06-15
  • 2015-11-28
相关资源
最近更新 更多