Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 2755

 
... всё - после контр-рекламы удаляюсь...  просто адрес сайта harvard.edu немного смутил... как и отсылка линка на SUTVA в части timeseries 
 
Ну и ладненько, хой с ним, тогда и углубляться сам не буду, есть другие интересные темы

Нравится ваша экспрессия и анализ, верю 😀

Я думал там в библиотеке есть какие-нибудь готовые средства чтобы можно было что-нибудь вывести без особых потуг
 
Aleksey Nikolayev #:

Есть у меня функция которая ищет паттерн/последовательность  в другой большой строке , если  нашла то ИТИНА иначе ЛОЖЬ

илюстрация



У меня есть функция на Рке но она медленная  для больших вычислений , вернее есть даже несколько функций написаных разными стилями..

вот так к примеру выглядят входные данные , кстати обе строки могут быть произвольной длинны

dat <- sample(letters[1:20],size = 30,replace = T)
pat <- c('a',"c","g")

dat
 [1] "h" "c" "q" "a" "s" "a" "d" "b" "c" "n" "a" "t" "e" "q" "s" "k" "j" "t" "l" "j" "n" "t" "r" "m" "h"
[26] "b" "o" "e" "g" "h"
pat
[1] "a" "c" "g"

вот  первая s1 функция написана в стандартном стиле, понятная но громоздкая

s1 <- function(pat , dat){  
  lv <- rep(F,length(pat))
  k <- 1     
  for(i in 1:length(dat)){        
    if(dat[i] == pat[k]) 
    {
      lv[k] <- TRUE
      k <- k+1 
    }       
    if(k==length(pat)+1) break
  }
  return(  all(lv)   )
}

или что то более елегантное s2

s2 <- function(pat , dat) grepl(paste(pat, collapse=".*"), paste(dat, collapse=""))

обе делают одно и то же

s1(pat = pat,dat = dat)
[1] TRUE
s2(pat = pat,dat = dat)
[1] TRUE

У меня вопрос/прозьба - можешь написать єту простую функцию на rcpp для меня?

 
Maxim Dmitrievsky #:
Я думал там в библиотеке есть какие-нибудь готовые средства чтобы можно было что-нибудь вывести без особых потуг

как у Решетова, - несколько десятков страниц назад

(и не в библиотеке дело)

 
mytarmailS #:

Есть у меня функция которая ищет паттерн/последовательность  в другой большой строке , если  нашла то ИТИНА иначе ЛОЖЬ

илюстрация



У меня есть функция на Рке но она медленная  для больших вычислений , вернее есть даже несколько функций написаных разными стилями..

вот так к примеру выглядят входные данные , кстати обе строки могут быть произвольной длинны

вот  первая s1 функция написана в стандартном стиле, понятная но громоздкая

или что то более елегантное s2

обе делают одно и то же

У меня вопрос/прозьба - можешь написать єту простую функцию на rcpp для меня?

Не готов браться за это, поскольку нет свободного времени, да и не очень люблю кодить и дебажить. Да и вам будет полезнее разобраться самому. На какие-то конкретные технические вопросы отвечу, если смогу.

 
Aleksey Nikolayev #:

Не готов браться за это, поскольку нет свободного времени, да и не очень люблю кодить и дебажить. Да и вам будет полезнее разобраться самому. На какие-то конкретные технические вопросы отвечу, если смогу.

спасибо что не помог) сам разобрался и это здорово )

Р код

yes_seq <- function(pat , dat){  
  lv <- rep(F,length(pat))
  k <- 1     
  for(i in 1:length(dat)){        
    if(dat[i] == pat[k]){
      lv[k] <- TRUE
      k <- k+1 
    }       
    if(k==length(pat)+1) break
  }
  return(  all(lv)   )
}

Rcpp  код

src <-
  "bool yes_seq_cpp(NumericVector pat, NumericVector dat){

    LogicalVector lv (pat.length() ,false);
    int k=0;

    for(int i=0; i<dat.length(); ++i){
    
      if(dat[i]==pat[k]){
            lv[k] = true;
            k = k+1; 
          }
if(k==pat.length())  break;
}
    
return  is_true(all(lv == true));
}
"
Rcpp::cppFunction(src)


есть вопрос:  как сделать так чтобы входные переменные pat dat могли принимать как числовые вектора (как сейчас) так и строковые (string vector) ?




п.с. Функция оказалась всего в 6 раз быстрее (( я думал будет хотябы 100 кратный прирост (((

microbenchmark::microbenchmark( yes_seq(pat,dat), yes_seq_cpp(pat,dat))

Unit: microseconds
                  expr    min     lq     mean median      uq     max neval cld
     yes_seq(pat, dat) 42.193 43.333 44.78712 43.903 45.0435 106.052   100   b
 yes_seq_cpp(pat, dat)  5.701  5.987  6.61993  6.272  6.8425  22.807   100  a 
 
mytarmailS #:

спасибо что не помог) сам разобрался и это здорово )

Р код

Rcpp  код


есть вопрос:  как сделать так чтобы входные переменные pat dat могли принимать как числовые вектора (как сейчас) так и строковые (string vector) ?




п.с. Функция оказалась всего в 6 раз быстрее (( я думал будет хотябы 100 кратный прирост (((

Можно скомпилировать код R (compile). У меня дало  почти 3-х кратное ускорение работы кода.

Вместо for использовать foreach, загрузив все ядра.

 
СанСаныч Фоменко #:

Можно скомпилировать код R (compile). У меня дало  почти 3-х кратное ускорение работы кода.

Вместо for использовать foreach, загрузив все ядра.

начиная с версии  R 3.4 компиляция   cmpfun включена по умолчанию в весь код Р

https://stackoverflow.com/questions/41502721/could-someone-explain-what-compiling-in-r-is-and-why-it-would-speed-up-this-c
 
mytarmailS #:

начиная с версии  R 3.4 компиляция   cmpfun включена по умолчанию в весь код Р

https://stackoverflow.com/questions/41502721/could-someone-explain-what-compiling-in-r-is-and-why-it-would-speed-up-this-c

Этот пост я понимаю, что теперь вроде бы всегда компилируются пакеты, что кстати видно при обновлении пакетов , строка byte-compile and prepare package for lazy loading .

Но считаю, что пользовательский код НЕ компилируется. Загружаем функции по source и в описании source не видел, что загружаемая функция компилируется