트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 2756

 
Aleksey Nikolayev #:

다른 큰 문자열에서 패턴/시퀀스를 검색하는 함수가 있는데, 발견되면 ITINA 그렇지 않으면 False를 반환합니다.

예시



Rk에 함수가 있지만 큰 계산에는 느리거나 오히려 다른 스타일로 작성된 여러 함수가 있습니다.....

두 문자열 모두 임의의 길이가 될 수 있으므로 입력 데이터는 다음과 같습니다.

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 #:

다른 큰 문자열에서 패턴 / 시퀀스를 검색하는 함수가 있는데, 발견되면 ITINA 그렇지 않으면 거짓입니다.

그림



Rk에 함수가 있지만 큰 계산에는 느리거나 오히려 다른 스타일로 작성된 함수가 여러 개 있습니다....

입력 데이터는 다음과 같으며 두 문자열 모두 임의의 길이가 될 수 있습니다.

다음은 표준 스타일로 작성된 첫 번째 s1 함수로, 명확하지만 번거롭습니다.

또는 s2처럼 좀 더 우아하게 작성할 수도 있습니다.

둘 다 같은 일을 합니다.

질문/요청이 있습니다 - 이 간단한 함수를 rcpp로 작성해 주실 수 있나요?

자유 시간이 없고 코딩과 디버깅을 별로 좋아하지 않기 때문에 아직 할 준비가 되지 않았습니다. 그리고 직접 알아내는 것이 더 유용 할 것입니다. 가능한 한 구체적인 기술적 질문에 답변해 드리겠습니다.

 
Aleksey Nikolayev #:

자유 시간이 없고 코딩과 디버깅을 별로 좋아하지 않아서 아직 시작할 준비가 되지 않았습니다. 그리고 직접 알아내는 것이 더 유용할 것입니다. 가능한 한 구체적인 기술적 질문에 답변해 드리겠습니다.

도와주지 않아서 고마워요) 제가 직접 알아냈습니다.)

R 코드

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 데이터 입력 변수가 숫자 벡터 (지금처럼)와 문자열 벡터를 모두 허용하도록 만드는 방법은 무엇입니까?




추신 : 함수는 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 #:

도와주지 않아서 고마워요) 직접 알아냈고 훌륭합니다.)

R 코드

Rcpp 코드


지금처럼 숫자 벡터와 문자열 벡터를 모두 받아들이도록 하는 방법은 무엇인가요?




추신 : 함수는 6 배만 더 빠른 것으로 밝혀졌습니다 (( 적어도 100 배 더 빠를 것이라고 생각했습니다 ((((

R(컴파일)로 코드를 컴파일할 수 있습니다. 코드 속도가 거의 3배 빨라졌습니다.

for 대신 foreach를 사용하여 모든 커널을 로드합니다.

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

R 코드를 컴파일할 수 있습니다(컴파일). 코드 속도가 거의 3배 빨라졌습니다.

모든 커널을 로드할 때 for 대신 foreach를 사용합니다.

R 3.4 cmpfun 파일은 모든 R 코드에 기본적으로 포함되어 있으므로

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 컴파일은 모든 R 코드에 기본적으로 포함되어 있기 때문입니다.

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

이 게시물은 이제 패키지를 업데이트 할 때 항상 패키지를 컴파일하는 것처럼 보이는 것으로 이해합니다 , 라인 바이트 컴파일 및 지연 로딩을 위해 패키지를 준비하십시오.

그러나 나는 사용자 코드가 컴파일되지 않는다고 생각합니다. 우리는 소스별로 함수를로드하고 소스 설명에서로드 할 함수가 컴파일되는 것을 보지 못했습니다.

 
MQL5에서행렬 및 벡터로 작업하기문서가 게시되었습니다:

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

이 게시물은 이제 패키지를 업데이트 할 때 항상 패키지를 컴파일하는 것처럼 보입니다 , 라인 바이트 컴파일 및 지연 로딩을 위해 패키지를 준비 할 때 볼 수 있습니다 .

그러나 나는 사용자 코드가 컴파일되지 않는다고 생각합니다. 우리는 소스별로 함수를로드하고 소스 설명에서로드 할 함수가 컴파일되는 것을 보지 못했습니다.

흠, 나는 그것을 시도 할 것이다

 
mytarmailS #:

지금처럼 숫자 벡터와 문자열 벡터를 모두 받아들이도록 하는 방법은 무엇인가요?

오버로드를 위한 첫 번째 아이디어는 이름은 같지만 인수가 다른 다른 함수를 작성하는 것입니다. Rcpp에서 이 작업을 해본 적이 없어서 작동할지 모르겠습니다. 아마도 별도의 파일에 C 코드를 만들고 cppFunction() 대신 sourceCpp()를 사용해야 할 것입니다.

사유: