- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试编写一种算法来查找时间序列中的感知重要点 (PIP) PIP。这些是“塑造”或“表征”时间序列的点。这很简单。该算法连接时间序列的第一个点和最后一个点,并在它们之间“绘制”一条线。在下一步中,算法会在时间序列中寻找与“假想”线具有最大“距离”(该距离可以通过垂直距离或欧氏距离简单测量)的点。这一点是下一个 PIP。现在有两条线。将第一个点与新 PIP 连接,第二条线 - 将新 PIP 与最后一个点连接。该算法现在再次执行相同的操作。检查两条线:“哪个点距离最远”-> 将此点设置为下一个 PIP。
这是算法的可视化,后面是伪代码
伪代码:
Function findPIPs(P)
Input: sequence p[1 ..m]
Output: PIPList L[l..m]
Begin
Set L[l] = P[1], L[2] = P[2]
Repeat until L[l ..m] all filled
Begin
Select point p[j] with maximum distance to the adjacent points in PIPList(L[1] and L[2] initially)
Append P[j] to L
End
Return L
END
我试图在 R 中实现它。但它似乎完全没有效率。这需要很多时间。此外还有一个小“错误”(有时一些点恰好位于插值线上。因此,距离为“0”——算法目前没有考虑这个问题)。
最后我想我需要用 Rcpp 用 c++ 编写代码。例如,有没有办法通过向量化使 R 代码更高效?
这是我的 R 代码:
# PIPs
# -> Input
## Vector
# <- Output
# PIPs Indiezes
getPIPs <- function(x, y, distance = "EUK") {
PIPs <- vector("list", 4)
PIPs[[1]] <- c(1, length(y))
for(i in 1:(length(y)-2)) {
switch(distance,
EUK = (DISTANCE.F <- EUK.distance.f),
VD = (DISTANCE.F <- VD.distance.f ),
)
PIPs <- helper.f(PIPs, x, y, DISTANCE.F)
}
return(PIPs)
}
helper.f <- function(PIPs, x, y, DISTANCE.F) {
t <- sort(PIPs[[1]])
gesamt <- NULL
for(z in 1:(length(t)-1)) {
gesamt <- c(gesamt,DISTANCE.F(x, y, t[z], t[z+1]))
}
if(all(gesamt == 0)) return(PIPs)
else PIPs[[1]] <- append(PIPs[[1]], which.max(gesamt))
return(PIPs)
}
EUK.distance.f <- function(x, y, sI, eI) {
pointsbetween <- sI:eI
erg <-
sqrt((sI - x[pointsbetween])^2 + (y[sI] - y[pointsbetween])^2) +
sqrt((eI - x[pointsbetween])^2 + (y[eI] - y[pointsbetween])^2)
erg[1] <- 0
erg <- erg[-length(erg)]
return(erg)
}
VD.distance.f <- function(x, y, sI, eI) { #Start und Endindex
erg <-
abs(y[sI:eI] - (y[sI] +
(x[sI:eI] - x[sI]) *
((y[eI] - y[sI]) / (x[eI] - x[sI]))
)
)
erg <- erg[-length(erg)]
return(erg)
}
#visualize
itertivePlotPIPS.f <- function(x, y, z) {
plot(x, y)
lines(sort(PIPs[[1]][1:length(x)]), y[sort(PIPs[[1]][1:length(x)])], col = "azure3")
lines(sort(PIPs[[1]][1:z]), y[sort(PIPs[[1]][1:z])])
}
运行代码
x <- 1:100 # "Time" (x)-axis
y <- sample(1:100) # "Data" y-axis
getPIPs(x, y, "EUK")
可视化数据
itertivePlotPIPS.f(x,y,10) # the 10 at the end means "take the first ten PIPs"
我希望它不会太困惑。我试图让它变得简单。
References: Fu, Tak chung et al. (2008). "Representing Financial timeseries based on data point importance". In: Engineering Applicationsof Artifcial Intelligence 21.2. F/S, PIIP, pp. 277{300. issn:0952-1976. doi: http://dx.doi.org/10.1016/j.engappai.2007.04.009. url: http://www.sciencedirect.com/science/article/pii/S0952197607000577.
最佳答案
这可能会更快,尚未实际测试您的代码。我认为这可行(?!),但可能需要进行测试。它只检查到线的垂直距离,需要做更多的工作来检查到线的欧氏距离。大多数情况下,它只是避免使用可能有助于加快代码速度的显式 for 循环。
## Some test data
tst <- data.frame(x=1:100, y=rnorm(100, 4*sin(seq(1,4*pi,len=100)), 1))
tst <- as.matrix(tst)
pip <- function(ps, interp=NULL, breakpoints=NULL) {
if (missing(interp)) {
interp <- approx(x=c(ps[1,"x"], ps[nrow(ps),"x"]),
y=c(ps[1,"y"],ps[nrow(ps),"y"]), n=nrow(ps))
interp <- do.call(cbind, interp)
breakpoints <- c(1, nrow(ps))
} else {
ds <- sqrt(rowSums((ps - interp)^2)) # close by euclidean distance
ind <- which.max(ds)
ends <- c(min(ind-breakpoints[breakpoints<ind]), min(breakpoints[breakpoints>ind]-ind))
leg1 <- approx(x=c(ps[ind-ends[1],"x"], ps[ind,"x"]),
y=c(ps[ind-ends[1],"y"], ps[ind,"y"]), n=ends[1]+1)
leg2 <- approx(x=c(ps[ind,"x"], ps[ind+ends[2],"x"]),
y=c(ps[ind,"y"], ps[ind+ends[2],"y"]), n=ends[2])
interp[(ind-ends[1]):ind, "y"] <- leg1$y
interp[(ind+1):(ind+ends[2]), "y"] <- leg2$y
breakpoints <- c(breakpoints, ind)
}
list(interp=interp, breakpoints=breakpoints)
}
constructPIP <- function(ps, times=10) {
res <- pip(ps)
for (i in 2:times) {
res <- pip(ps, res$interp, res$breakpoints)
}
res
}
res <- constructPIP(tst, times=5)
plot(tst)
points(res$interp, col="blue", type="l")
关于c++ - 高效的感知重要点 (PIP) 算法。在 R 或 Rcpp 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30428900/
pip install 和 pip download 有什么区别? $ pip --version pip 9.0.1 from c:\users\nahawk\python\python27\lib
我的控制台: desarrollador@desarrollador-HP-14-Notebook-PC1:~$ pip freeze Exception: Traceback (most rec
我用 pip 安装: $ sudo apt-get install python-setuptools, python-pip 但是当我尝试使用 pip 安装某些东西时出现此错误 sudo pip i
我通过 yum 安装了 python-pip 包(使用 Fedora 的更新仓库)。它不会将 pip 脚本添加到我的 PATH 中。 $ which pip /usr/bin/which: no pi
在Windows上使用python。当我尝试使用以下命令安装新库时。它会抛出错误,指出‘pip’未被识别为内部或外部命令、可操作程序或批处理文件。。但是当我使用代码的时候。它给了我一个有效的结果。。为
我收到了消息 You are using pip version 8.0.2, however version 8.1.2 is available. You should consider upgr
我安装了一个版本的包(例如 transformers 3.4.0) 我想安装一个较早的版本。我安装: pip install transformers==3.1.0 检查安装的版本时 pip free
我最近决定尝试在我的计算机上安装 tesseract 并运行 pip3 install tesseract-ocr。 然后它开始下载 cython,这提醒我 tesseract-ocr 不是我想要的,
默认情况下,pip搜索软件包名称和描述。对于某些软件包,这会导致大量的伪造命中,而找到我真正想要的伪命中是一件痛苦的事情。 我如何告诉点子我只想按名称搜索? 最佳答案 目前尚不可行,因为当前实现(第8
我如何使用 pip在 oh-my-zsh 中?我正在尝试安装 nltk通过 pip,但它告诉我 zsh: command not found: pip .当我查看 .oh-my-zsh/custom/
我有一个pip要求文件,其中包括Torch和Torchvision的特定于CPU的特定版本。我可以使用以下pip命令成功安装我的需求。 pip install --requirement azure-
pip 有一个 -q/--quiet 标志,可以从命令行理想地工作。我正在使用自动部署过程 (Amazon Elastic Beanstalk),并且这些工具使用 pip 从需求文件进行安装。 不幸的
我有一个带有附加功能的软件包,通常可以使用以下命令进行安装。 pip install package[extras] 但是,我也可以通过轮子安装相同的包,指定一些轮子 URL,如下所示。 pip in
我试过pip freeze 。我需要它只输出由换行符分隔的模块,例如 pip freeze ,除非没有版本号,因为我正在尝试创建一个自动升级程序,并且想要执行 pip install --upgrad
我尝试在pip.conf中使用带有index-url的pip。但是,我无法确保我们可以获得所有必需的 python 库。所以,我想知道 pip 支持是否在 pip.conf 的 [global] 部分
如何列出我直接使用 pip 安装的软件包, 省略已安装的任何依赖项? 我有一个运行的 virtualenv,命令如下 $ pip install A B C $ pip install X Y Z 因
这个问题在这里已经有了答案: How to upgrade all Python packages with pip (50 个回答) 2年前关闭。 我有一个 bash 命令来升级我安装的所有 pip
我正在尝试使用 ssh 运行一些 python 脚本以登录到谷歌计算引擎,但由于我没有权限访问我的用户中的 .cache/pip 文件夹,所以找不到所有已安装的 pip 模块是否有正确的方法来执行此操
有没有办法告诉 pip 永远不要为我的包创建轮缓存? 背景 我编写了一个供内部使用的包,当使用 setup.py 中的 cmdclass 安装时,它会设置一些符号链接(symbolic link)。如
我看过类似的帖子 pip install vs python3 -m pip install 这并没有真正澄清这个问题。 我是 Python 新手,只是遵循基本的 python 3 教程,他们提到 p
我是一名优秀的程序员,十分优秀!