초기화

행렬과 벡터를 선언하고 초기화하는 방법에는 여러 가지가 있습니다.

함수

액션

Assign

자동 캐스트로 행렬, 벡터 또는 배열을 복사

CopyIndicatorBuffer

지정된 지표의 지정된 양의 버퍼를 벡터로 가져오기

CopyRates

지정된 양의 지정된 기호 기간의 MqlRates 구조의 과거 시리즈를 행렬 또는 벡터로 가져옵니다.

CopyTicks

틱을 MqlTick 구조에서 행렬 또는 벡터로 가져오기

CopyTicksRange

지정된 날짜 범위 내에서 MqlTick 구조에서 행렬 또는 벡터로 틱 가져오기

Eye

대각선에 1이 있고 이외의 곳에 0이 있는 행렬을 반환

Identity

지정된 크기의 항등 행렬을 생성

Ones

1로 채워진 새 행렬을 만들고 반환

Zeros

0으로 채워진 새 행렬을 만들고 반환

Full

주어진 값으로 채워진 새로운 행렬을 생성하고 반환

Tri

주어진 대각선 이하에 1이 있고 다른 위치에 0이 있는 행렬을 구성

Init

행렬 또는 벡터를 초기화합니다.

Fill

지정된 값으로 기존 행렬 또는 벡터 채우기

크기를 지정하지 않은 선언(데이터에 대한 메모리 할당 없음):

  matrix         matrix_a;   //double 타입 행렬
  matrix<doublematrix_a1;  // double matrix을 선언하는 또 다른 방법; 템플릿에서 사용 가능
  matrixf        matrix_a2;  // float matrix
  matrix<float>  matrix_a3;  // float matrix
  vector         vector_a;   // double vector
  vector<doublevector_a1;
  vectorf        vector_a2;  // float vector
  vector<float>  vector_a3;

 

지정된 크기의 선언(데이터에 대한 메모리 할당이 있지만 초기화는 없음):

  matrix         matrix_a(128,128);           // 매개변수는 상수이거나 
  matrix<doublematrix_a1(InpRows,InpCols);  // 혹은 변수
  matrixf        matrix_a2(1,128);            // 수평 벡터의 아날로그
  matrix<float>  matrix_a3(InpRows,1);        // 수직 행렬의 아날로그
  vector         vector_a(256);
  vector<doublevector_a1(InpSize);
  vectorf        vector_a2(SomeFunc());       // 함수 SomeFunc는 벡터 크기를 설정하는 데 사용되는 ulong 유형의 숫자를 반환합니다.
  vector<float>  vector_a3(InpSize+16);       // 표현식이 매개변수로 사용될 수 있습니다.

 

초기화 선언(행렬 및 벡터 크기는 초기화 시퀀스에 의해 결정됨):

  matrix         matrix_a={{0.1,0.2,0.3},{0.4,0.5,0.6}};
  matrix<doublematrix_a1=matrix_a;                      // 동일한 타닙의 행렬이어야 함
  matrixf        matrix_a2={{1,0,0},{0,1,0},{0,0,1}};
  matrix<float>  matrix_a3={{1,2},{3,4}};
  vector         vector_a={-5,-4,-3,-2,-1,0,1,2,3,4,5};
  vector<doublevector_a1={1,5,2.4,3.3};
  vectorf        vector_a2={0,1,2,3};
  vector<float>  vector_a3=vector_a2;                     // 동일한 타ㄴ입의 벡터이어야 함

 

초기화와 함께 선언:

template<typename T>
void MatrixArange(matrix<T> &mat,T value=0.0,T step=1.0)
  {
   for(ulong i=0i<mat.Rows(); i++)
     {
      for(ulong j=0j<mat.Cols(); j++,value+=step)
         mat[i][j]=value;
     }
  }
template<typename T>
void VectorArange(vector<T> &vec,T value=0.0,T step=1.0)
  {
   for(ulong i=0i<vec.Size(); i++,value+=step)
      vec[i]=value;
  }
...
 
  matrix  matrix_a(size_m,size_k,MatrixArange,-M_PI,0.1); // 먼저 size_m x size_k 크기의 초기화되지 않은 행렬이 생성된 다음 초기화 시 지정된 매개변수가 있는 MatrixArange 함수가 호출됩니다
  matrixf matrix_a1(10,20,MatrixArange);                  // 행렬을 생성한 후 기본 매개변수가 있는 MatrixArange 함수가 호출됩니다.
  vector  vector_a(size,VectorArange,-10.0);              // 벡터를 생성한 후 하나의 매개변수가 있는 VectorArange 함수가 호출되고 두 번째 매개변수는 기본값입니다.
  vectorf vector_a1(128,VectorArange);

 

데이터 메모리는 항상 동적이므로 행렬 또는 벡터의 차원을 변경할 수 있습니다.

정적 메서드

특정 방식으로 초기화된 지정된 크기의 행렬 및 벡터를 생성하기 위한 정적 메서드:

  matrix         matrix_a =matrix::Eye(4,5,1);
  matrix<doublematrix_a1=matrix::Full(3,4,M_PI);
  matrixf        matrix_a2=matrixf::Identity(5,5);
  matrixf<floatmatrix_a3=matrixf::Ones(5,5);
  matrix         matrix_a4=matrix::Tri(4,5,-1);
  vector         vector_a =vector::Ones(256);
  vectorf        vector_a1=vector<float>::Zeros(16);
  vector<float>  vector_a2=vectorf::Full(128,float_value);

 

이미 생성된 행렬 및 벡터를 초기화하는 메서드:

  matrix  matrix_a;
  matrix_a.Init(size_m,size_k,MatrixArange,-M_PI,0.1);
  matrixf matrix_a1(3,4);
  matrix_a1.Init(10,20,MatrixArange);
  vector  vector_a;
  vector_a.Init(128,VectorArange);
  vectorf vector_a1(10);
  vector_a1.Init(vector_size,VectorArange,start_value,step);
 
  matrix_a.Fill(double_value);
  vector_a1.Fill(FLT_MIN);
  matrix_a1.Identity();