也许是一个微不足道的问题,但作为R package ptw的输出,我有一组多项式系数(存储在slot warp.coef中),它指定了时间轴的多项式变换。 E.g。
warpcoeff=c(-0.0001357075,1.000147,7.281139e-09,-8.870294e-13,-2.60201e-16,1.671129e-20)
用于5阶多项式变换(但顺序可以变化)。
我现在有一个矩阵x
,其中包含时间值,我希望将这个多项式转换应用到所有元素(依次)。什么是最简单,最快速的方法?
(理想情况下,它应该适用于x是向量或矩阵的时候)
欢呼声, 汤姆
答案 0 :(得分: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]))