R中基质的多项式转换

时间:2013-02-19 12:33:38

标签: r matrix transformation

也许是一个微不足道的问题,但作为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是向量或矩阵的时候)

欢呼声, 汤姆

1 个答案:

答案 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]))