更新:迄今为止 表现最佳的算法就是这个算法.
该问题探讨了用于检测实时时间序列数据中的突然峰值的稳健算法.
请考虑以下数据集:
p = [1 1 1.1 1 0.9 1 1 1.1 1 0.9 1 1.1 1 1 0.9 1 1 1.1 1 1 1 1 1.1 0.9 1 1.1 1 1 0.9 1, ...
1.1 1 1 1.1 1 0.8 0.9 1 1.2 0.9 1 1 1.1 1.2 1 1.5 1 3 2 5 3 2 1 1 1 0.9 1 1 3, ...
2.6 4 3 3.2 2 1 1 0.8 4 4 …Run Code Online (Sandbox Code Playgroud) language-agnostic algorithm signal-processing time-series data-analysis
我刚才刚刚发现Visual C++ 2008(也许还有早期的版本?)支持for eachstl列表等语法以促进迭代.例如:
list<Object> myList;
for each (Object o in myList)
{
o.foo();
}
Run Code Online (Sandbox Code Playgroud)
我很高兴发现它,但我担心可怕的一天,当有人决定我需要能够在say,gcc或其他编译器中编译我的代码时的可移植性.这种语法是否得到广泛支持,我可以使用它而不必担心可移植性问题吗?
如果我为我的编译器启用OpenMP,是否可以并行执行任何STL算法/容器操作,如std :: fill,std :: transform?我目前正在与MSVC 2008合作.或者也许有其他方法使它并发?
谢谢.
在Boost.Accumulator中,您可以将样本添加到累加器,然后从中提取统计量.例如:
acc(1.)
acc(2.)
acc(3.)
cout << mean; // 2
Run Code Online (Sandbox Code Playgroud)
图书馆有很多更复杂的统计量,例如skewness,kurtosis或p_square_cumulative_distribution.
我想做的是这样的事情:
acc(1.)
acc(2.)
acc(3.)
std::cout << mean(acc); // 2
acc.pop() // withdraw the first value (1.)
std::cout << mean(acc); // 2.5
Run Code Online (Sandbox Code Playgroud)
pop()将以FIFO(先进先出)方式工作.我想要做的是在滑动时间窗口内以在线(增量)方式计算我的数据的统计数据.
累加器必须在内部保留所有值.
我可以自己做,但我总是首先检查现有的库,并且可能有一些算法,我不知道在数据传入或传出时巧妙地计算数量.