gpt4 book ai didi

dtw 中用于包装的 R 自定义代理函数

转载 作者:行者123 更新时间:2023-12-04 18:09:48 24 4
gpt4 key购买 nike

我有两列数据 Tm 和 Ts,我想应用更改距离函数的 dtw 算法。代理提供了这种可能性,但我不明白为什么它会给我一个错误。我有 2 个长度相同的数据向量:

 Tm     Ts  
301.0607 300.6008
301.3406 300.6515
301.5912 300.7289
301.5777 300.8506
301.5996 301.0158
301.6414 301.2103
301.7181 301.4113


myDTW<-function(x,y)(diff(x,lag=1,difference=1)-diff(y,lag=1,difference=1))^2
pr_DB$set_entry(FUN = myDTW, names = c("test_myDTW", "myDTW"))

Alignment<-dtw(a$Ts,b$Tm,dist.method="test_myDTW",keep.internals=TRUE)

Error in do.call(".External", c(list(CFUN, x, y, pairwise,
if (!is.function(method)) get(method) else method), :
not a scalar return value

diff() 将向量的长度从 n 更改为 n-1,但两个向量都发生了变化,因此我认为问题不在于匹配不同长度的向量。你有什么建议吗?

最佳答案

错误是明确的:

   not a scalar return value

您的 myDTW 不返回标量。您需要将其定义为有效的距离函数。如果你把它改成类似的东西:

myDTW <- function(x,y){
res <- (diff(x,lag=1,difference=1)
-diff(y,lag=1,difference=1))^2
sum(res) ## I return the sum of square here
}

它会起作用的。我认为您还需要使用 modify_entry 来修改寄存器中的方法值。

dat <- read.table(text='Tm     Ts  
301.0607 300.6008
301.3406 300.6515
301.5912 300.7289
301.5777 300.8506
301.5996 301.0158
301.6414 301.2103
301.7181 301.4113',header=TRUE)


myDTW <- function(x,y){
res <- (diff(x,lag=1,difference=1)
-diff(y,lag=1,difference=1))^2
sum(res)
}
pr_DB$modify_entry(FUN = myDTW, names = c("test_myDTW", "myDTW"))
library(dtw)
## I change a and b to dat here
dtw(dat$Ts,dat$Tm,dist.method="test_myDTW",keep.internals=TRUE)

结果是:

DTW alignment object
Alignment size (query x reference): 7 x 7
Call: dtw(x = dat$Ts, y = dat$Tm, dist.method = "test_myDTW", keep.internals = TRUE)

关于dtw 中用于包装的 R 自定义代理函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17159045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com