9using EigMX = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
13 memset(A, 0, N *
sizeof(T));
16template <
class TA,
class TB,
class TC>
17void ARRAY_MATMUL(TA* A, TB* B, TC* C,
size_t N1,
size_t N2,
size_t N3) {
18 Eigen::Map<EigMX<TA>> MapA(A, N1, N3);
19 Eigen::Map<EigMX<TB>> MapB(B, N1, N2);
20 Eigen::Map<EigMX<TC>> MapC(C, N2, N3);
24template <
class TA,
class TB,
class TC>
26 Eigen::Map<EigMX<TA>> MapA(A, N1, N3);
27 Eigen::Map<EigMX<TB>> MapB(B, N2, N1);
28 Eigen::Map<EigMX<TC>> MapC(C, N2, N3);
29 MapA = MapB.adjoint() * MapC;
32template <
class TA,
class TB,
class TC>
34 Eigen::Map<EigMX<TA>> MapA(A, N1, N3);
35 Eigen::Map<EigMX<TB>> MapB(B, N1, N2);
36 Eigen::Map<EigMX<TC>> MapC(C, N3, N2);
37 MapA = MapB * MapC.adjoint();
46template <
class TA,
class T,
class TC>
49 Eigen::Map<EigMX<TA>> MapA(A, N1, N3);
50 Eigen::Map<EigMX<T>> MapB(B, N2, N1);
51 Eigen::Map<EigMX<TC>> MapC(C, N2, 1);
52 Eigen::Map<EigMX<T>> MapD(D, N2, N3);
53 MapA = MapB.adjoint() * (MapC.asDiagonal() * MapD);
55 Eigen::Map<EigMX<TA>> MapA(A, N1, N3);
56 Eigen::Map<EigMX<T>> MapB(B, N2, N1);
57 Eigen::Map<EigMX<TC>> MapC(C, N2, N2);
58 Eigen::Map<EigMX<T>> MapD(D, N2, N3);
59 MapA = MapB.adjoint() * (MapC * MapD);
63template <
class TA,
class T,
class TC>
66 Eigen::Map<EigMX<TA>> MapA(A, N1, N3);
67 Eigen::Map<EigMX<T>> MapB(B, N1, N2);
68 Eigen::Map<EigMX<TC>> MapC(C, N2, 1);
69 Eigen::Map<EigMX<T>> MapD(D, N3, N2);
70 MapA = MapB * (MapC.asDiagonal() * MapD.adjoint());
72 Eigen::Map<EigMX<TA>> MapA(A, N1, N3);
73 Eigen::Map<EigMX<T>> MapB(B, N1, N2);
74 Eigen::Map<EigMX<TC>> MapC(C, N2, N2);
75 Eigen::Map<EigMX<T>> MapD(D, N3, N2);
76 MapA = MapB * (MapC * MapD.adjoint());
80template <
class TB,
class TC>
82 Eigen::Map<EigMX<TB>> MapB(B, N1, N2);
83 Eigen::Map<EigMX<TC>> MapC(C, N2, N1);
84 TB res = (MapB.array() * (MapC.transpose()).array()).sum();
90 Eigen::Map<EigMX<T>> MapA(A, n, n);
#define ARRAY_MATMUL_TRANS2(_A, _B, _C, _n1, _n2, _n3)
#define ARRAY_MATMUL3_TRANS1(_A, _B, _C, _D, _n1, _n2, _n0, _n3)
#define ARRAY_MATMUL3_TRANS2(_A, _B, _C, _D, _n1, _n2, _n0, _n3)
#define ARRAY_OUTER_CONJ2(_A, _B, _C, _n1, _n2)
#define ARRAY_MATMUL(_A, _B, _C, _n1, _n2, _n3)
#define ARRAY_EYE(_A, _n)
#define ARRAY_MATMUL_TRANS1(_A, _B, _C, _n1, _n2, _n3)
#define ARRAY_TRACE2(_B, _C, _n1, _n2)
#define ARRAY_CLEAR(_A, _n)
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > EigMX