1

也许是一个微不足道的问题,但作为 R 包 ptw 的输出,我有一组多项式系数(存储在 slot warp.coef 中),它们指定时间轴的多项式变换。例如

warpcoeff=c(-0.0001357075,1.000147,7.281139e-09,-8.870294e-13,-2.60201e-16,1.671129e-20)

对于 5 阶多项式变换(但顺序可能会有所不同)。我现在有一个x包含时间值的矩阵,我想将这个多项式变换应用于该矩阵(依次应用于所有元素)。最简单和最快的方法是什么?(理想情况下,当 x 是向量或矩阵时,它都应该适用)

干杯,汤姆

4

1 回答 1

4

如果您希望转换仅应用于矩阵的每个元素,那么您可以构造一个递归函数,如下所示:

my_fn <- function(x, w) {
    idx <- length(w)
    if (idx == 0) return(0)
    o <- x^(idx-1) * w[idx] + my_fn(x, head(w, -1))
}

x <- matrix(1:15, ncol=3)
o <- my_fn(x, warpcoeff)

> o
#          [,1]      [,2]     [,3]
# [1,] 1.000011  6.000747 11.00148
# [2,] 2.000158  7.000894 12.00163
# [3,] 3.000305  8.001041 13.00178
# [4,] 4.000452  9.001188 14.00192
# [5,] 5.000599 10.001335 15.00207

或者,您可以Reduce用作:

Reduce('+', lapply(0:5, function(idx) x^idx * w[idx+1]))
于 2013-02-19T13:13:59.327 回答