Я хочу ускорить следующий алгоритм.Я даю функции временной ряд XTS, а затем хочу выполнить анализ главных компонентов для каждого временного отрезка в предыдущих точках X (сейчас я использую 500), а затем использую результаты этого PCA (5 основных компонентов вследующий код) для вычисления некоторого значения.Примерно так:
lookback <- 500
for(i in (lookback+1):nrow(x))
{
x.now <- x[(i-lookback):i]
x.prcomp <- prcomp(x.now)
ans[i] <- (some R code on x.prcomp)
}
Я предполагаю, что для этого потребуется, чтобы я скопировал строки просмотра в виде столбцов, чтобы x
был похож на cbind(x,lag(x),lag(x,k=2),lag(x,k=3)...lag(x,k=lookback))
, а затем запустил prcomp
в каждой строке?Это кажется дорогим, хотя.Возможно какой-то вариант apply
?Я готов изучить Rcpp, но хотел, чтобы вы, ребята, до этого запускали его.
Редактировать: Ух, спасибо за все ответы.Информация о моем наборе данных / алгоритме:
- dim (x.xts) в настоящее время = 2000x24.Но в конечном итоге, если это показывает обещание, оно должно будет работать быстро (я дам ему несколько наборов данных).
- func (x.xts) занимает ~ 70 секунд.Это 2000-500 вызовов prcomp с 1500 500x24 созданиями данных.
Я попытался использовать Rprof
, чтобы увидеть, какая часть алгоритма была самой дорогой, но я впервые использую Rprof
, поэтому яМне нужен еще опыт работы с этим инструментом, чтобы получить понятные результаты (спасибо за предложение).
Я думаю, что сначала я попытаюсь свернуть это в цикл типа _apply, а затем взгляну на распараллеливание.