初期化

行列とベクトルを宣言して初期化するには、いくつかの方法があります。

関数

アクション

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<double> matrix_a1; // double行列を宣言する別の方法。テンプレートで使用可能
matrixf       matrix_a2; // float行列
matrix<float> matrix_a3; // float行列
vector         vector_a;   // doubleベクトル
vector<double> vector_a1;
vectorf       vector_a2; // floatベクトル
vector<float> vector_a3;

 

サイズを指定した宣言(データのメモリ割り当てあり、初期化なし)

matrix         matrix_a(128,128);           // パラメータは定数
matrix<double> matrix_a1(InpRows,InpCols); // または変数のいずれか
matrixf       matrix_a2(1,128);           // 水平ベクトルのアナログ
matrix<float> matrix_a3(InpRows,1);       // 垂直ベクトルのアナログ
vector         vector_a(256);
vector<double> vector_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<double> matrix_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<double> vector_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=0; i<mat.Rows(); i++)
    {
    for(ulong j=0; j<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=0; i<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);             // ベクトルを作成した後、1つのパラメータを持つ関数VectorArangeが呼び出される。2 番目のパラメータはデフォルト
vectorf vector_a1(128,VectorArange);

 

データのメモリは常に動的であるため、行列/ベクトルの次元は変更できることに注意してください。

静的メソッド

特定の方法で初期化された、指定されたサイズの行列とベクトルを作成するための静的メソッド

matrix         matrix_a =matrix::Eye(4,5,1);
matrix<double> matrix_a1=matrix::Full(3,4,M_PI);
matrixf       matrix_a2=matrixf::Identity(5,5);
matrixf<float> matrix_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();