以下是时间序列数据的示例:
time - 3 sec, value - 6
time - 10 sec, value - 7
time - 12 sec, value - 8
time - 17 sec, value - 9
time - 28 sec, value - 93
time - 29 sec, value - 94
我想计算过去30秒的平均值。那有什么简单的标准算法吗?很高兴看到Java实现的链接
答案 0 :(得分:1)
我(和朋友一起)写了一个计算平均数的代码:
package dingen;
import java.util.Scanner;
public class Gemiddelde {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
float maxCount = 0;
float avgCount = 0;
System.out.println("How many numbers do you want");
int n = sc.nextInt();
for(int i = 0; i < n; i++) {
System.out.println("Number: ");
float number = sc.nextInt();
maxCount = maxCount + number;
}
avgCount = maxCount / n;
System.out.println("maxCount = " + maxCount);
System.out.println("avgCount = " + avgCount);
}
}
您唯一需要做的就是更换您的课程和包裹。
您将收到消息:How many numbers do you want?:
然后它会问你插入的数字量。
示例:
你想要几个号码?:6
数量:6
编号:7
数量:8
数:9
数:93
数:94
maxCount = 217.0
avgCount = 36.166668
我希望我帮助你解决问题:)
答案 1 :(得分:0)
我使用TreeMap<Integer, Integer>
,关键是秒和值,以及你的价值;)
TreeMap
有一些有用的方法,例如lastKey()
和tailMap()
,它们适合您的用例:
TreeMap<Integer, Integer> map = new TreeMap<>();
// add all your entries
Integer lastSecond = map.lastKey(); // returns the highest key
Integer thirtySecondsAgo = lastSecond - 30;
SortedMap<Integer, Integer> range = map.tailMap(thirtySecondsAgo);
int count = 0;
int sum = 0;
for (Integer value : range.values()) {
sum += value;
count++;
}
double average = (double) sum / (double) count;
tailMap()
docs:
返回此地图的部分视图,其键大于或等于
fromKey
对于您的问题,fromKey
将为thirtySecondsAgo
。