私は C++ で次のことを行う関数を書きました: (非常に長い可能性がある) vectorx
と thresholdを指定して、そのような、、および≥の部分列をthr
見つけます。意図は、グラフの解像度が であるという意味で、と「同じように見える」場所の短い部分列を見つけることです。y
x
x[1]∈y
x[length(x)]∈y
∀i∈1:length(y) y[i+1]-y[i]
thr
x
plot(x)
plot(x[subsequence])
thr
この関数は R パッケージの一部であり、Rcpp
インターフェイスを使用して C++ 関数を呼び出します。ソースはこちら: https://gist.github.com/kenahoo/8922376。(実際にはdata.frame
、単純なベクトルではなく で動作しますが、各列をベクトルとして個別に動作させてから、インデックス シーケンスをマージするのと同じです。)
素敵で効率的な同等のpure-Rソリューションを見つけたいと思います.1つの明らかなアイデアは のようなものですwhich(diff(x)>thr)
が、これは適切ではありませんthr
.
例:
> set.seed(123)
> x <- cumsum(runif(100, -1, 1))
> y <- downsampleForPlot(data.frame(x=x), 2.5)
> y
[1] 1 11 26 46 57 71 81 100
これにより、次のような近似が生成されます。
> plot(x)
> lines(stepfun(y[-1], x[y], f=0), col='blue')
これに関するアイデアは大歓迎です。