我有一个
形式的向量 0 21.3400
0 22.3000
1 22.3000
左栏是小时,右侧是值。我需要计算每小时的平均值。问题是我的样本运行时间超过24小时(多天),因此它会再次从0-23循环回到0-23。另一个问题是,有时我会丢失一小时的样本。例如;
12.0000 29.5000
14.0000 35.7400
关于如何解决这个问题的任何想法?
答案 0 :(得分:1)
部分“所以它会再次从0-23回到0-23”我不清楚。也许您正在寻找模函数mod()
。但是在解决了这个特定问题后,可以使用accumarray
来解决平均问题。它就像是这个功能的完美用例。
%// your data
data = [
0 21.3400
0 22.3000
1 22.3000
12.0000 29.5000
14.0000 35.7400];
%// group (find subs)
[hours, b, subs] = unique(data(:,1));
%// apply function mean to grouped data
avg = accumarray(subs, data(:,2), [], @mean);
result = [hours, avg]
在result
中,结果存储为类似表,第一列是唯一小时,第二列是这些小时的平均数据。
result =
0 21.8200
1.0000 22.3000
12.0000 29.5000
14.0000 35.7400
例如:对于小时0
,数据值21.3400
和22.300
的平均值正确计算为(21.3400 + 22.300)/2
,等于21.8200
。