Khởi tạo
Có nhiều cách để khai báo và khởi tạo ma trận và vector.
Hàm | Hành động |
---|---|
Assign | Sao chép một ma trận, vector hoặc mảng với ép kiểu tự động |
CopyIndicatorBuffer | Lấy dữ liệu của bộ đệm chỉ báo được chỉ định với số lượng xác định vào một vector |
CopyRates | Lấy chuỗi lịch sử của cấu trúc MqlRates của biểu đồ-kỳ được chỉ định với số lượng xác định vào ma trận hoặc vector |
CopyTicks | Lấy các tick từ cấu trúc MqlTick vào ma trận hoặc vector |
CopyTicksRange | Lấy các tick từ cấu trúc MqlTick vào ma trận hoặc vector trong phạm vi ngày được chỉ định |
Eye | Trả về một ma trận với các số một trên đường chéo và số không ở các vị trí khác |
Identity | Tạo một ma trận đơn vị với kích thước được chỉ định |
Ones | Tạo và trả về một ma trận mới được điền toàn số một |
Zeros | Tạo và trả về một ma trận mới được điền toàn số không |
Full | Tạo và trả về một ma trận mới được điền với giá trị đã cho |
Tri | Xây dựng một ma trận với các số một trên và dưới đường chéo được chỉ định, số không ở các vị trí khác |
Init | Khởi tạo một ma trận hoặc vector |
Fill | Điền một ma trận hoặc vector hiện có với giá trị được chỉ định |
Random | Hàm tĩnh. Tạo và trả về một ma trận hoặc vector mới được điền với các giá trị ngẫu nhiên. Các giá trị ngẫu nhiên được tạo đồng đều trong phạm vi được chỉ định |
Khai báo mà không chỉ định kích thước (không cấp phát bộ nhớ cho dữ liệu):
cpp
matrix matrix_a; // ma trận kiểu double
matrix<double> matrix_a1; // cách khác để khai báo ma trận double; có thể dùng trong template
matrixf matrix_a2; // ma trận float
matrix<float> matrix_a3; // ma trận float
vector vector_a; // vector double
vector<double> vector_a1;
vectorf vector_a2; // vector float
vector<float> vector_a3;
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Khai báo với kích thước được chỉ định (có cấp phát bộ nhớ cho dữ liệu, nhưng không khởi tạo):
cpp
matrix matrix_a(128,128); // các tham số có thể là hằng số
matrix<double> matrix_a1(InpRows,InpCols); // hoặc biến
matrixf matrix_a2(1,128); // tương tự vector ngang
matrix<float> matrix_a3(InpRows,1); // tương tự vector dọc
vector vector_a(256);
vector<double> vector_a1(InpSize);
vectorf vector_a2(SomeFunc()); // hàm SomeFunc trả về một số kiểu ulong, được dùng để đặt kích thước vector
vector<float> vector_a3(InpSize+16); // biểu thức có thể được dùng làm tham số
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Khai báo với khởi tạo (kích thước ma trận và vector được xác định bởi chuỗi khởi tạo):
cpp
matrix matrix_a={{0.1,0.2,0.3},{0.4,0.5,0.6}};
matrix<double> matrix_a1=matrix_a; // phải là ma trận cùng kiểu
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; // phải là vector cùng kiểu
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Khai báo với khởi tạo:
cpp
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); // đầu tiên tạo ma trận chưa khởi tạo kích thước size_m x size_k, sau đó gọi hàm MatrixArange với các tham số được chỉ định lúc khởi tạo
matrixf matrix_a1(10,20,MatrixArange); // sau khi tạo ma trận, gọi hàm MatrixArange với tham số mặc định
vector vector_a(size,VectorArange,-10.0); // sau khi tạo vector, gọi hàm VectorArange với một tham số, tham số thứ hai là mặc định
vectorf vector_a1(128,VectorArange);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Lưu ý rằng kích thước ma trận hoặc vector có thể thay đổi, vì bộ nhớ cho dữ liệu luôn là động.
Phương thức tĩnh
Phương thức tĩnh để tạo ma trận và vector với kích thước được chỉ định, được khởi tạo theo cách nhất định:
cpp
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);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Phương thức để khởi tạo ma trận và vector đã tạo:
cpp
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();
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12