Inner
Tích trong của hai ma trận.
cpp
matrix matrix::Inner(
const matrix& b // ma trận thứ hai
);
1
2
3
2
3
Tham số
b
[in] Ma trận.
Giá trị trả về
Ma trận.
Ghi chú
Tích trong của hai vector là tích vô hướng của hai vector vector::Dot()
.
Thuật toán đơn giản cho tích trong của hai ma trận trong MQL5:
cpp
bool MatrixInner(matrix& c, const matrix& a, const matrix& b)
{
//--- số cột phải bằng nhau
if(a.Cols()!=b.Cols())
return(false);
//--- kích thước của ma trận kết quả phụ thuộc vào số vector trong mỗi ma trận
ulong rows=a.Rows();
ulong cols=b.Rows();
matrix result(rows,cols);
//---
for(ulong i=0; i<rows; i++)
{
vector v1=a.Row(i);
for(ulong j=0; j<cols; j++)
{
vector v2=b.Row(j);
result[i][j]=v1.Dot(v2);
}
}
//---
c=result;
return(true);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Ví dụ MQL5:
cpp
matrix a={{0,1,2},{3,4,5}};
matrix b={{0,1,2},{3,4,5},{6,7,8}};
matrix c=a.Inner(b);
Print(c);
matrix a1={{0,1,2}};
matrix c1=a1.Inner(b);
Print(c1);
/*
[[5,14,23]
[14,50,86]]
[[5,14,23]]
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Ví dụ Python:
cpp
import numpy as np
A = np.arange(6).reshape(2, 3)
B = np.arange(9).reshape(3, 3)
A1= np.arange(3)
print(np.inner(A, B))
print("");
print(np.inner(A1, B))
import numpy as np
A = np.arange(6).reshape(2, 3)
B = np.arange(9).reshape(3, 3)
A1= np.arange(3)
print(np.inner(A, B))
print("");
print(np.inner(A1, B))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17