R - связанные строки матриц - сделать код быстрее - PullRequest
0 голосов
/ 19 ноября 2018

Вот моя дилемма:

  • Я пытаюсь оценить физический актив, чтобы сделать это, мне нужно смоделировать множество случайных путей.
  • После того, как каждый путь смоделирован, яЯ должен заполнить 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...