//+------------------------------------------------------------------+ //| Pearson product-moment correlation matrix | //| INPUT PARAMETERS: | //| X - array[N,M], sample matrix: | //| * J-th column corresponds to J-th variable | //| * I-th row corresponds to I-th observation | //| N - N>=0, number of observations: | //| * if given, only leading N rows of X are used | //| * if not given, automatically determined from input | //| size | //| M - M>0, number of variables: | //| * if given, only leading M columns of X are used | //| * if not given, automatically determined from input | //| size | //| OUTPUT PARAMETERS: | //| C - array[M,M], correlation matrix (zero if N=0 or N=1) | //+------------------------------------------------------------------+ static bool CBaseStat::PearsonCorrM(const CMatrixDouble &cx,const int n, const int m,CMatrixDouble &c)
PearsonCorr2 - 행과 행의 상관관계. 전체 행렬의 경우: 1번째 행은 1번째 이후의 모든 행을, 2번째 행은 2번째 이후의 모든 행을 검사합니다.
//+------------------------------------------------------------------+ //| Pearson product-moment correlation coefficient | //| Input parameters: | //| X - sample 1 (array indexes: [0..N-1]) | //| Y - sample 2 (array indexes: [0..N-1]) | //| N - N>=0, sample size: | //| * if given, only N leading elements of X/Y are | //| processed | //| * if not given, automatically determined from | //| input sizes | //| Result: | //| Pearson product-moment correlation coefficient | //| (zero for N=0 or N=1) | //+------------------------------------------------------------------+ static double CBaseStat::PearsonCorr2(const double &cx[],const double &cy[], const int n)
그리고 PearsonCorrM2를 통해 전체 행렬을 하나의 행렬로 작성하고 다른 행을 검사할 수 있습니다. 따라서 1 행부터 모든 행까지 한 번에 확인할 수 있지만 10 번째 행의 경우 10 위 행과의 상관 관계가 이미 계산되어 있기 때문에 불필요한 작업이 분명히 있습니다.
static bool CBaseStat::PearsonCorrM2(const CMatrixDouble &cx,const CMatrixDouble &cy, const int n,const int m1,const int m2, CMatrixDouble &c)
소규모 TF에서 메모리 오버플로. 메모리 오버플로우가 16개의 osu와 스왑 파일(Mac의 경우 스왑) 30기가로 발생합니다. 예를 들어 50k x 50k 상관 행렬이 있습니다.
분명히 알고리즘이 MQL에서 동일하기 때문에 파이썬의 몇 가지 특성이 있습니다.
이것은 정면 변형입니다. 체를 사용하면 훨씬 더 빠릅니다.
백만 개의 막대가 있다고 가정해 봅시다. 문자열의 길이는 10입니다. 그러면 1,000만 개의 이중 값에 대한 1d 배열은 80Mb입니다. 점 3. - 메모리 소비량으로 500Mb라고 가정해 봅시다. 제가 고려하지 않은 것은 무엇일까요?
알고리즘이 MQL에서도 동일하기 때문에 파이썬의 몇 가지 특성이 있을 것입니다.
이것은 정면 변형입니다. 체는 더 빠릅니다.
백만 개의 막대가 있다고 가정해 봅시다. 문자열의 길이는 10입니다. 그러면 1,000만 개의 이중값에 대한 1d 배열은 80Mb입니다. - 메모리 소비량으로 500Mb라고 가정해 봅시다. 제가 고려하지 않은 것은 무엇일까요?
모든 행과 모든 행의 행렬의 상관관계는 사이클(1행에서 다른 모든 행) 및 짝수 루프(1행에서 모든 행)보다 몇 배 더 빠른 것으로 간주됩니다. 알고리즘으로 인해 어떤 종류의 가속이 있습니다. 상관 관계 계산의 alglib 버전에서 확인했습니다.
코드를 주시면 확인해 보겠습니다.
MathAbs ()는 불필요한 것 같습니다.
MQL에서도 알고리즘이 동일하기 때문에 파이썬의 몇 가지 특성이 있을 것입니다.
이것은 정면 변형입니다. 체는 더 빠릅니다.
백만 개의 막대가 있다고 가정해 봅시다. 문자열의 길이는 10입니다. 그러면 1,000만 개의 이중 값에 대한 1d 배열은 80Mb입니다. - 메모리 소비량으로 500Mb라고 가정해 봅시다. 제가 고려하지 않은 것은 무엇일까요?
파이썬의 어떤 라이브러리도 이를 계산할 수 없다는 사실에 당황해서 결국 혼란스러웠습니다.
팬더는 RAM을 넘치고 오버헤드가 엄청납니다.
남파이는 오류를 표시하지 않고 인터프리터 세션을 충돌시키고 종료합니다 :).코드를 주시면 확인해 보겠습니다.
함수
PearsonCorrM - 모든 행과 모든 행의 상관관계가 가장 빠릅니다.
//+------------------------------------------------------------------+
//| Pearson product-moment correlation matrix |
//| INPUT PARAMETERS: |
//| X - array[N,M], sample matrix: |
//| * J-th column corresponds to J-th variable |
//| * I-th row corresponds to I-th observation |
//| N - N>=0, number of observations: |
//| * if given, only leading N rows of X are used |
//| * if not given, automatically determined from input |
//| size |
//| M - M>0, number of variables: |
//| * if given, only leading M columns of X are used |
//| * if not given, automatically determined from input |
//| size |
//| OUTPUT PARAMETERS: |
//| C - array[M,M], correlation matrix (zero if N=0 or N=1) |
//+------------------------------------------------------------------+
static bool CBaseStat::PearsonCorrM(const CMatrixDouble &cx,const int n,
const int m,CMatrixDouble &c)
PearsonCorr2 - 행과 행의 상관관계. 전체 행렬의 경우: 1번째 행은 1번째 이후의 모든 행을, 2번째 행은 2번째 이후의 모든 행을 검사합니다.
//| Pearson product-moment correlation coefficient |
//| Input parameters: |
//| X - sample 1 (array indexes: [0..N-1]) |
//| Y - sample 2 (array indexes: [0..N-1]) |
//| N - N>=0, sample size: |
//| * if given, only N leading elements of X/Y are |
//| processed |
//| * if not given, automatically determined from |
//| input sizes |
//| Result: |
//| Pearson product-moment correlation coefficient |
//| (zero for N=0 or N=1) |
//+------------------------------------------------------------------+
static double CBaseStat::PearsonCorr2(const double &cx[],const double &cy[],
const int n)
그리고 PearsonCorrM2를 통해 전체 행렬을 하나의 행렬로 작성하고 다른 행을 검사할 수 있습니다. 따라서 1 행부터 모든 행까지 한 번에 확인할 수 있지만 10 번째 행의 경우 10 위 행과의 상관 관계가 이미 계산되어 있기 때문에 불필요한 작업이 분명히 있습니다.
const int n,const int m1,const int m2,
CMatrixDouble &c)
20k*20k 넘피 매트릭스의 무게는 2GB입니다.
4억 개의 이중 숫자의 무게는 3기가입니다.
MathAbs ()는 불필요한 것 같습니다.
부호를 별도로 확인할 수도 있습니다. 요점이 아닙니다.
4억 개의 이중 숫자의 무게는 3기가바이트입니다.
이 모든 기쁨에 비해 메모리가 충분하지 않다는 것은 이해할 수 있습니다.