2013-02-19 2 views
1

Возможно, тривиальный вопрос, но в качестве вывода пакета R ptw у меня есть набор полиномиальных коэффициентов (хранимых в слоте warp.coef), которые определяют полиномиальное преобразование оси времени. Например.Полиномиальное преобразование матрицы в R

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

для преобразования полинома 5-го порядка (порядок может меняться). Теперь у меня есть матрица x со значениями времени, к которым я хотел бы применить это полиномиальное преобразование (ко всем элементам в свою очередь). Каков самый простой и быстрый способ сделать это? (в идеале он должен как работать, когда х является вектор или матрица)

веселит, Том

+0

ли первый элемент коэффициент при x^5, 2 x^4 и т. д. ...? – Arun

+0

Первый элемент является постоянным, затем x, затем x^2 и т. Д. –

+0

Итак, вы хотите, чтобы каждый элемент матрицы считался «x», к которому это преобразование должно применяться, не так ли? – Arun

ответ

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])) 
+0

отлично! много thx !! –

Смежные вопросы