Вот моя дилемма:
- Я пытаюсь оценить физический актив, чтобы сделать это, мне нужно смоделировать множество случайных путей.
- После того, как каждый путь смоделирован, яЯ должен заполнить 26 матриц одинакового размера, которые связаны не только с ценовыми траекториями, но и друг с другом
- Проблема, с которой я сталкиваюсь, заключается в том, что я вынужден идти построчно в этих матрицах, и это действительно замедляетвниз по моему коду (13,33 секунды на моделирование)
- Я имею в виду, что матрицы связаны: если у вас есть 2 матрицы A и B, которые уже инициализированы (поэтому первые строки заполнены начальными значениями) строка 2из B является функцией строки 1 из A, затем строка 2 из A является функцией строки 2 из B, затем строка 3 из B является функцией строки 2 из A, поэтому я не могу заполнить быть без заполнения A и тисковнаоборот.
- В действительности функции, которые их связывают, очень и очень сложны, и строка одной матрицы может быть функцией строк до 5 других матриц и индексов строк этих 5 матриц.Они не всегда так просты, как строка с индексом -1 и строка с одним и тем же индексом.
- Я вынужден пройтись по всем матрицам строка за строкой, чтобы заполнить их все.Поэтому я вынужден заполнить строку 2 матрицы B, затем строку 2 матрицы A, затем строку 3 матрицы B, а затем строку 3 матрицы A ...
Я приведу следующий воспроизводимый пример только дляпроясните, что я имею в виду под связанными вместе и что я делаю сейчас.Пожалуйста, поймите, что на самом деле функции являются более сложными, и поэтому связи матриц между собой также.
a <- matrix(c(1,0,0,1,0,0,1,0,0), nrow = 3, ncol = 3)
b <- matrix(c(2,0,0,2,0,0,2,0,0), nrow = 3, ncol = 3)
function_fill_a <- function(a, b, r = 2){
a[r, ] <- a[r,] + b[r, ]
return(a)
}
function_fill_b <- function(a, b, r = 2){
b[r, ] <- a[r-1,] + 2
return(b)
}
for( i in 2:nrow(a)){
b <- function_fill_b(a, b, i)
a <- function_fill_a(a, b, i)
}
Есть ли способ не быть вынужденным использовать это для цикла в конце, потому чтоэто то, что замедляет мой код, я уверен.
EDIT - Ответить на комментарии
в моем коде этот цикл for на самом деле является функцией, которая принимает списокматрицы, а затем он применяет функции к матрицам в списке.
, поэтому это выглядит так:
m <- list("a" = a, "b"= b)
fill_all <- function(m){
for( i in 2:nrow(m$a)){
m$b <- function_fill_b(m$a, m$b, i)
m$a <- function_fill_a(m$a, m$b, i)
}
return(m)
}
m <- fill_all(m)
Если я использую Rcpp, мне придется переписать все функции или только этопоследний ?Есть ли способ вызвать эти функции, записанные в R в cppFunction?