FLImaging 7.10.21.1
FLImagingFoundation/Matrix.h
1#pragma once
2
8
9
10#include "DefinitionsMathematics.h"
11#include "FLPointArray.h"
12
14namespace FLImaging
15{
17 namespace Foundation
18 {
28 {
34
40 };
41
51 {
67 };
68
69 template <typename Ty>
70 class FL_EXPORT CMatrixFor3D;
71
77 template <typename Ty>
78 class FL_EXPORT CMatrix : public Base::CFLBase
79 {
80 public:
86
91 virtual ~CMatrix();
92
100 CMatrix(const CMatrix<Ty>& matrix);
101
109 CMatrix(const CMatrix<Ty>* pMatrix);
110
120 CMatrix(int64_t i64Row, int64_t i64Column);
121
133 CMatrix(int64_t i64Row, int64_t i64Column, Ty tFillValue);
134
145
155 virtual const CMatrix<Ty>& operator+=(const int32_t& i32Param);
156
166 virtual const CMatrix<Ty>& operator+=(const int64_t& i64Param);
167
177 virtual const CMatrix<Ty>& operator+=(const float& f32Param);
178
188 virtual const CMatrix<Ty>& operator+=(const double& f64Param);
189
199 virtual const CMatrix<Ty>& operator+=(const CMatrix<Ty>& cMat);
200
210 virtual const CMatrix<Ty>& operator-=(const int32_t& i32Param);
211
221 virtual const CMatrix<Ty>& operator-=(const int64_t& i64Param);
222
232 virtual const CMatrix<Ty>& operator-=(const float& f32Param);
233
243 virtual const CMatrix<Ty>& operator-=(const double& f64Param);
244
254 virtual const CMatrix<Ty>& operator-=(const CMatrix<Ty>& cMat);
255
265 virtual const CMatrix<Ty>& operator*=(const int32_t& i32Param);
266
276 virtual const CMatrix<Ty>& operator*=(const int64_t& i64Param);
277
287 virtual const CMatrix<Ty>& operator*=(const float& f32Param);
288
298 virtual const CMatrix<Ty>& operator*=(const double& f64Param);
299
309 virtual const CMatrix<Ty>& operator*=(const CMatrix<Ty>& cMat);
310
320 virtual const CMatrix<Ty>& operator/=(const int32_t& i32Param);
321
331 virtual const CMatrix<Ty>& operator/=(const int64_t& i64Param);
332
342 virtual const CMatrix<Ty>& operator/=(const float& f32Param);
343
353 virtual const CMatrix<Ty>& operator/=(const double& f64Param);
354
364 virtual const CMatrix<Ty>& operator/=(const CMatrix<Ty>& cMat);
365
375 CMatrix<Ty> operator+(const int32_t& i32Param) const;
376
386 CMatrix<Ty> operator+(const int64_t& i64Param) const;
387
397 CMatrix<Ty> operator+(const float& f32Param) const;
398
408 CMatrix<Ty> operator+(const double& f64Param) const;
409
420
430 CMatrix<Ty> operator-(const int32_t& i32Param) const;
431
441 CMatrix<Ty> operator-(const int64_t& i64Param) const;
442
452 CMatrix<Ty> operator-(const float& f32Param) const;
453
463 CMatrix<Ty> operator-(const double& f64Param) const;
464
475
485 CMatrix<Ty> operator*(const int32_t& i32Param) const;
486
496 CMatrix<Ty> operator*(const int64_t& i64Param) const;
497
507 CMatrix<Ty> operator*(const float& f32Param) const;
508
518 CMatrix<Ty> operator*(const double& f64Param) const;
519
530
540 CMatrix<Ty> operator/(const int32_t& i32Param) const;
541
551 CMatrix<Ty> operator/(const int64_t& i64Param) const;
552
562 CMatrix<Ty> operator/(const float& f32Param) const;
563
573 CMatrix<Ty> operator/(const double& f64Param) const;
574
585
595 virtual const CMatrix<Ty>& operator=(const CMatrix<double>& matrix);
596
606 virtual const CMatrix<Ty>& operator=(const CMatrix<float>& matrix);
607
617 virtual const CMatrix<Ty>& operator=(const CMatrix<double>* pMatrix);
618
628 virtual const CMatrix<Ty>& operator=(const CMatrix<float>* pMatrix);
629
641 virtual const CMatrix<Ty>& operator=(const Base::CFLArray<Base::CFLArray<Ty>>& fla2Matrix);
642
652 virtual bool operator==(const CMatrix<Ty>& cMat) const;
653
663 virtual bool operator!=(const CMatrix<Ty>& cMat) const;
664
674 CMatrix<Ty> operator==(const double& f64Param) const;
675
685 CMatrix<Ty> operator!=(const double& f64Param) const;
686
696 CMatrix<Ty> operator<(const double& f64Param) const;
697
707 CMatrix<Ty> operator>(const double& f64Param) const;
708
718 CMatrix<Ty> operator<(const CMatrix<Ty>& matOperand) const;
719
729 CMatrix<Ty> operator>(const CMatrix<Ty>& matOperand) const;
730
740 CMatrix<Ty> operator%(const double& f64Param) const;
741
751 CMatrix<Ty> operator%(const CMatrix<Ty>& matOperand) const;
752
762 CMatrix<Ty> operator&&(const CMatrix<Ty>& matOperand) const;
763
773 virtual const CMatrix<Ty>& operator%=(const double& f64Param);
774
775 friend CMatrix<Ty> operator+(const double& value, const CMatrix<Ty>& mat)
776 {
777 CMatrix<Ty> matReturn(mat);
778 matReturn += value;
779 return matReturn;
780 }
781
782 friend CMatrix<Ty> operator+(const float& value, const CMatrix<Ty>& mat)
783 {
784 CMatrix<Ty> matReturn(mat);
785 matReturn += value;
786 return matReturn;
787 }
788
789 friend CMatrix<Ty> operator+(const int64_t& value, const CMatrix<Ty>& mat)
790 {
791 CMatrix<Ty> matReturn(mat);
792 matReturn += value;
793 return matReturn;
794 }
795
796 friend CMatrix<Ty> operator+(const int32_t& value, const CMatrix<Ty>& mat)
797 {
798 CMatrix<Ty> matReturn(mat);
799 matReturn += value;
800 return matReturn;
801 }
802
803 friend CMatrix<Ty> operator-(const double& value, const CMatrix<Ty>& mat)
804 {
805 CMatrix<Ty> matReturn(mat);
806 matReturn *= -1;
807 matReturn += value;
808 return matReturn;
809 }
810
811 friend CMatrix<Ty> operator-(const float& value, const CMatrix<Ty>& mat)
812 {
813 CMatrix<Ty> matReturn(mat);
814 matReturn *= -1;
815 matReturn += value;
816 return matReturn;
817 }
818
819 friend CMatrix<Ty> operator-(const int64_t& value, const CMatrix<Ty>& mat)
820 {
821 CMatrix<Ty> matReturn(mat);
822 matReturn *= -1;
823 matReturn += value;
824 return matReturn;
825 }
826
827 friend CMatrix<Ty> operator-(const int32_t& value, const CMatrix<Ty>& mat)
828 {
829 CMatrix<Ty> matReturn(mat);
830 matReturn *= -1;
831 matReturn += value;
832 return matReturn;
833 }
834
835 friend CMatrix<Ty> operator*(const double& value, const CMatrix<Ty>& mat)
836 {
837 CMatrix<Ty> matReturn(mat);
838 matReturn *= value;
839 return matReturn;
840 }
841
842 friend CMatrix<Ty> operator*(const float& value, const CMatrix<Ty>& mat)
843 {
844 CMatrix<Ty> matReturn(mat);
845 matReturn *= value;
846 return matReturn;
847 }
848
849 friend CMatrix<Ty> operator*(const int64_t& value, const CMatrix<Ty>& mat)
850 {
851 CMatrix<Ty> matReturn(mat);
852 matReturn *= value;
853 return matReturn;
854 }
855
856 friend CMatrix<Ty> operator*(const int32_t& value, const CMatrix<Ty>& mat)
857 {
858 CMatrix<Ty> matReturn(mat);
859 matReturn *= value;
860 return matReturn;
861 }
862
863 friend CMatrix<Ty> operator<(const double& value, const CMatrix<Ty>& mat)
864 {
865 CMatrix<Ty> matReturn(mat > value);
866 return matReturn;
867 }
868
869 friend CMatrix<Ty> operator>(const double& value, const CMatrix<Ty>& mat)
870 {
871 CMatrix<Ty> matReturn(mat < value);
872 return matReturn;
873 }
874
882 virtual operator Ty* ();
883
895 virtual Ty* operator() (const int32_t i32Row, const int32_t i32Column) const;
896
906 virtual Ty* operator[](int32_t i32Index);
907
917 virtual Ty* operator[](int64_t i64Index);
918
928 virtual const Ty* operator[](int32_t i32Index) const;
929
939 virtual const Ty* operator[](int64_t i64Index) const;
940
951
967 virtual const CResult Create(int64_t i64Row, int64_t i64Column, bool bFillZero = true);
968
982 virtual const CResult Create(const CMatrix<float>& matShape, Ty tFillValue = 0);
983
997 virtual const CResult Create(const CMatrix<double>& matShape, Ty tFillValue = 0);
998
1012 virtual const CResult Create(const CMatrix<float>* pMatShape, Ty tFillValue = 0);
1013
1027 virtual const CResult Create(const CMatrix<double>* pMatShape, Ty tFillValue = 0);
1028
1042 virtual const CResult Ones(int64_t i64Row, int64_t i64Column);
1043
1057 virtual const CResult Zeros(int64_t i64Row, int64_t i64Column);
1058
1074 virtual const CResult Full(int64_t i64Row, int64_t i64Column, Ty tFillValue);
1075
1087 virtual const CResult OnesLike(const CMatrix<float>& matShape);
1088
1100 virtual const CResult OnesLike(const CMatrix<double>& matShape);
1101
1113 virtual const CResult OnesLike(const CMatrix<float>* pMatShape);
1114
1126 virtual const CResult OnesLike(const CMatrix<double>* pMatShape);
1127
1139 virtual const CResult ZerosLike(const CMatrix<float>& matShape);
1140
1152 virtual const CResult ZerosLike(const CMatrix<double>& matShape);
1153
1165 virtual const CResult ZerosLike(const CMatrix<float>* pMatShape);
1166
1178 virtual const CResult ZerosLike(const CMatrix<double>* pMatShape);
1179
1193 virtual const CResult FullLike(const CMatrix<float>& matShape, Ty tFillValue);
1194
1208 virtual const CResult FullLike(const CMatrix<double>& matShape, Ty tFillValue);
1209
1223 virtual const CResult FullLike(const CMatrix<float>* pMatShape, Ty tFillValue);
1224
1238 virtual const CResult FullLike(const CMatrix<double>* pMatShape, Ty tFillValue);
1239
1247 virtual bool IsValid() const override;
1248
1250
1269 virtual bool IsEqual(const CMatrix<double>& matRhs) const;
1270 virtual bool IsEqual(const CMatrix<double>* pMatRhs) const;
1271 virtual bool IsEqual(const CMatrix<float>& matRhs) const;
1272 virtual bool IsEqual(const CMatrix<float>* pMatRhs) const;
1274
1276
1291 virtual bool IsEqual(const CMatrix<double>& matRhs, double f64Tolerance) const;
1292 virtual bool IsEqual(const CMatrix<double>* pMatRhs, double f64Tolerance) const;
1293 virtual bool IsEqual(const CMatrix<float>& matRhs, double f64Tolerance) const;
1294 virtual bool IsEqual(const CMatrix<float>* pMatRhs, double f64Tolerance) const;
1296
1298
1309 virtual bool IsShapeEqual(const CMatrix<double>& matRhs) const;
1310 virtual bool IsShapeEqual(const CMatrix<double>* pMatRhs) const;
1311 virtual bool IsShapeEqual(const CMatrix<float>& matRhs) const;
1312 virtual bool IsShapeEqual(const CMatrix<float>* pMatRhs) const;
1314
1326 virtual const CResult Assign(const CMatrix<double>& matrix);
1327
1339 virtual const CResult Assign(const CMatrix<float>& matrix);
1340
1352 virtual const CResult Assign(const CMatrix<double>* pMatrix);
1353
1365 virtual const CResult Assign(const CMatrix<float>* pMatrix);
1366
1382 virtual const CResult Assign(Ty* pArr2Mat, int64_t i64Row, int64_t i64Column);
1383
1397 virtual const CResult Assign(const Base::CFLArray<Base::CFLArray<Ty>>& fla2Matrix);
1398
1412 virtual const CResult Assign(const Base::CFLArray<Base::CFLArray<Ty>>* pFla2Matrix);
1413
1429 virtual const CResult Set(Ty* pArr2Mat, int64_t i64Row, int64_t i64Column);
1430
1435 virtual void Clear();
1436
1444 virtual int64_t GetColumn() const;
1445
1453 virtual int64_t GetRow() const;
1454
1462 virtual int64_t GetElementCount() const;
1463
1471 virtual int64_t GetTotalSizeByte() const;
1472
1480 virtual int64_t GetColumnSizeByte() const;
1481
1489 virtual int64_t GetRowSizeByte() const;
1490
1498 virtual Ty* GetBuffer() const;
1499
1507 virtual Ty** GetYCache() const;
1508
1520 virtual Ty* GetValue(int64_t i64Row, int64_t i64Column) const;
1521
1541 virtual const CResult GetRange(CMatrix<Ty>* pMatResult, int64_t i64StartRow = -1, int64_t i64StartColumn = -1, int64_t i64EndRow = -1, int64_t i64EndColumn = -1) const;
1542
1564 virtual const CResult GetRange(Base::CFLArray<Ty>* pMatResult, int64_t i64StartRow = -1, int64_t i64StartColumn = -1, int64_t i64EndRow = -1, int64_t i64EndColumn = -1) const;
1565
1587 virtual const CResult GetRange(Base::CFLArray<Base::CFLArray<Ty>>* pMatResult, int64_t i64StartRow = -1, int64_t i64StartColumn = -1, int64_t i64EndRow = -1, int64_t i64EndColumn = -1) const;
1588
1608 virtual const CResult GetRangeRef(CMatrix<Ty>* pMatResult, int64_t i64StartRow = -1, int64_t i64StartColumn = -1, int64_t i64EndRow = -1, int64_t i64EndColumn = -1) const;
1609
1621 virtual const CResult Fill(Ty value);
1622
1632 virtual const CResult FillZero();
1633
1647 virtual const CResult FillRandom(Ty tRangeMin, Ty tRangeMax);
1648
1662 virtual const CResult FillLinear(Ty tRangeStart, Ty tRangeEnd);
1663
1677 virtual const CResult LinSpace(Ty tRangeStart, Ty tRangeEnd);
1678
1694 virtual const CResult SetValue(int64_t i64Row, int64_t i64Column, Ty value);
1695
1707 virtual const CResult Add(const CMatrix<Ty>& matrix);
1708
1720 virtual const CResult Add(const CMatrix<Ty>* pMatrix);
1721
1735 virtual const CResult Add(const CMatrix<Ty>& matrix, CMatrix<Ty>* pTargetMatrix) const;
1736
1750 virtual const CResult Add(const CMatrix<Ty>* pMatrix, CMatrix<Ty>* pTargetMatrix) const;
1751
1763 virtual const CResult Subtract(const CMatrix<Ty>& matrix);
1764
1776 virtual const CResult Subtract(const CMatrix<Ty>* pMatrix);
1777
1791 virtual const CResult Subtract(const CMatrix<Ty>& matrix, CMatrix<Ty>* pTargetMatrix) const;
1792
1806 virtual const CResult Subtract(const CMatrix<Ty>* pMatrix, CMatrix<Ty>* pTargetMatrix) const;
1807
1817 virtual const CResult Multiply(const int32_t& i32Scalar);
1818
1828 virtual const CResult Multiply(const int64_t& i64Scalar);
1829
1839 virtual const CResult Multiply(const float& f32Scalar);
1840
1850 virtual const CResult Multiply(const double& f64Scalar);
1851
1863 virtual const CResult Multiply(const CMatrix<Ty>& matrix);
1864
1876 virtual const CResult Multiply(const CMatrix<Ty>* pMatrix);
1877
1891 virtual const CResult Multiply(const CMatrix<Ty>& matrix, CMatrix<Ty>* pTargetMatrix) const;
1892
1906 virtual const CResult Multiply(const CMatrix<Ty>* pMatrix, CMatrix<Ty>* pTargetMatrix) const;
1907
1919 virtual const CResult MultiplyElementwise(const CMatrix<Ty>& matrix);
1920
1932 virtual const CResult MultiplyElementwise(const CMatrix<Ty>* pMatrix);
1933
1947 virtual const CResult MultiplyElementwise(const CMatrix<Ty>& matrix, CMatrix<Ty>* pTargetMatrix) const;
1948
1962 virtual const CResult MultiplyElementwise(const CMatrix<Ty>* pMatrix, CMatrix<Ty>* pTargetMatrix) const;
1963
1973 virtual const CResult Transpose();
1974
1986 virtual const CResult Transpose(CMatrix<Ty>* pTargetMatrix) const;
1987
1997 virtual const CResult Invert();
1998
2010 virtual const CResult Invert(CMatrix<Ty>* pTargetMatrix) const;
2011
2021 virtual const CResult Unit();
2022
2034 virtual const CResult Unit(CMatrix<Ty>* pTargetMatrix) const;
2035
2047 virtual const CResult SetDiagonal(Ty tVal);
2048
2062 virtual const CResult SetDiagonal(Ty tVal, CMatrix<Ty>* pTargetMatrix) const;
2063
2073 virtual const CResult PseudoInverse();
2074
2086 virtual const CResult PseudoInverse(CMatrix<Ty>* pTargetMatrix) const;
2087
2099 virtual Ty GetNorm(const Ty tP = 2) const;
2100
2118 virtual const CResult ReduceSum(const EMatrixReduceType eReduceType, CMatrix<Ty>* pMatResult) const;
2119
2137 virtual const CResult ReduceMean(const EMatrixReduceType eReduceType, CMatrix<Ty>* pMatResult) const;
2138
2156 virtual const CResult ReduceMax(const EMatrixReduceType eReduceType, CMatrix<Ty>* pMatResult) const;
2157
2175 virtual const CResult ReduceMin(const EMatrixReduceType eReduceType, CMatrix<Ty>* pMatResult) const;
2176
2184 virtual CMatrix<Ty> T() const;
2185
2193 virtual CMatrix<Ty> I() const;
2194
2202 virtual CMatrix<Ty> P() const;
2203
2211 virtual CMatrix<Ty> U() const;
2212
2220 virtual double Determinant() const;
2221
2237 virtual const CResult Hessenberg(CMatrix<Ty>* pMatrixH, CMatrix<Ty>* pMatrixP = nullptr) const;
2238
2256 virtual const CResult Schur(CMatrix<Ty>* pMatrixU, CMatrix<Ty>* pMatrixT) const;
2257
2275 virtual const CResult SVD(CMatrix<Ty>* pMatrixU, CMatrix<Ty>* pMatrixSig, CMatrix<Ty>* pMatrixVT) const;
2276
2292 virtual const CResult QR(CMatrix<Ty>* pMatrixQ, CMatrix<Ty>* pMatrixR) const;
2293
2309 virtual const CResult LU(CMatrix<Ty>* pMatrixL, CMatrix<Ty>* pMatrixU) const;
2310
2328 virtual const CResult LUP(CMatrix<Ty>* pMatrixP, CMatrix<Ty>* pMatrixL, CMatrix<Ty>* pMatrixU) const;
2329
2341 virtual bool CheckRange(Ty tMin, Ty tMax) const;
2342
2362 virtual const CResult MulTransposed(const CMatrix<Ty>* pMatrixSource, CMatrix<Ty>* pMatrixDestination, int32_t i32Order, CMatrix<Ty>* pMatDelta = nullptr, double f64Scale = 1.) const;
2363
2377 virtual const CResult CrossProduct(const CMatrix<Ty>& matrixSource2, CMatrix<Ty>* pMatrixDestination) const;
2378
2392 virtual const CResult CrossProduct(const CMatrix<Ty>* pMatrixSource2, CMatrix<Ty>* pMatrixDestination) const;
2393
2407 virtual const CResult Reshape(int64_t i64Row, int64_t i64Column = -1);
2408
2418 virtual const CResult Abs();
2419
2429 virtual const CResult Sqrt();
2430
2440 virtual const CResult Ceil();
2441
2451 virtual const CResult Floor();
2452
2462 virtual const CResult Round();
2463
2473 virtual const CResult Sin();
2474
2484 virtual const CResult Cos();
2485
2495 virtual const CResult Tan();
2496
2506 virtual const CResult Arcsin();
2507
2517 virtual const CResult Arccos();
2518
2530 virtual const CResult Arctan2(const CMatrix<Ty>& matrixX);
2531
2543 virtual const CResult Arctan2(const CMatrix<Ty>* pMatrixX);
2544
2554 virtual const CResult Degrees();
2555
2565 virtual const CResult Radians();
2566
2576 virtual const CResult Log();
2577
2587 virtual const CResult Log2();
2588
2598 virtual const CResult Log10();
2599
2609 virtual const CResult Log1p();
2610
2624 virtual const CResult Clip(Ty tMin, Ty tMax);
2625
2639 virtual const CResult ArgMin(int64_t& i64ResultRow, int64_t& i64ResultColumn) const;
2640
2658 virtual const CResult ArgMin(Base::CFLArray<int64_t>& flaResultIndex, EMatrixAxis eAxis) const;
2659
2677 virtual const CResult ArgMin(Base::CFLArray<int64_t>* pFlaResultIndex, EMatrixAxis eAxis) const;
2678
2692 virtual const CResult ArgMax(int64_t& i64ResultRow, int64_t& i64ResultColumn) const;
2693
2711 virtual const CResult ArgMax(Base::CFLArray<int64_t>& flaResultIndex, EMatrixAxis eAxis) const;
2712
2730 virtual const CResult ArgMax(Base::CFLArray<int64_t>* pFlaResultIndex, EMatrixAxis eAxis) const;
2731
2751 virtual const CResult ArgSort(CMatrix<Ty>* pMatResultIndex = nullptr, EMatrixSortOrder eOrder = EMatrixSortOrder_Ascending, EMatrixAxis eAxis = EMatrixAxis_Column);
2752
2760 virtual Ty Min() const;
2761
2777 virtual const CResult Min(CMatrix<Ty>& matResult, EMatrixAxis eAxis) const;
2778
2794 virtual const CResult Min(CMatrix<Ty>* pMatResult, EMatrixAxis eAxis) const;
2795
2803 virtual Ty Max() const;
2804
2820 virtual const CResult Max(CMatrix<Ty>& matResult, EMatrixAxis eAxis) const;
2821
2837 virtual const CResult Max(CMatrix<Ty>* pMatResult, EMatrixAxis eAxis) const;
2838
2846 virtual Ty Sum() const;
2847
2863 virtual const CResult Sum(CMatrix<Ty>& matResult, EMatrixAxis eAxis) const;
2864
2880 virtual const CResult Sum(CMatrix<Ty>* pMatResult, EMatrixAxis eAxis) const;
2881
2889 virtual Ty Mean() const;
2890
2906 virtual const CResult Mean(CMatrix<Ty>& matResult, EMatrixAxis eAxis) const;
2907
2923 virtual const CResult Mean(CMatrix<Ty>* pMatResult, EMatrixAxis eAxis) const;
2924
2932 virtual Ty Std() const;
2933
2949 virtual const CResult Std(CMatrix<Ty>& matResult, EMatrixAxis eAxis) const;
2950
2966 virtual const CResult Std(CMatrix<Ty>* pMatResult, EMatrixAxis eAxis) const;
2967
2981 virtual const CResult HStack(const CMatrix<Ty>& matInput, CMatrix<Ty>* pMatResult = nullptr);
2982
2996 virtual const CResult HStack(const CMatrix<Ty>* pMatInput, CMatrix<Ty>* pMatResult = nullptr);
2997
3011 virtual const CResult VStack(const CMatrix<Ty>& matInput, CMatrix<Ty>* pMatResult = nullptr);
3012
3026 virtual const CResult VStack(const CMatrix<Ty>* pMatInput, CMatrix<Ty>* pMatResult = nullptr);
3027
3039 virtual const CResult Swap(CMatrix<Ty>& matRight);
3040
3052 virtual const CResult Swap(CMatrix<Ty>* pMatRight);
3053
3071 virtual const CResult Diff(CMatrix<Ty>& matResult, EMatrixAxis eAxis = EMatrixAxis_Column, int64_t i64Depth = 1) const;
3072
3090 virtual const CResult Diff(CMatrix<Ty>* pMatResult, EMatrixAxis eAxis = EMatrixAxis_Column, int64_t i64Depth = 1) const;
3091
3103 virtual const CResult Dot(const CMatrix<Ty>* pMatInput);
3104
3118 virtual const CResult Dot(const CMatrix<Ty>* pMatInput, CMatrix<Ty>* pMatResult) const;
3119
3127 virtual double Prod() const;
3128
3146 virtual const CResult Prod(Base::CFLArray<double>& flaResult, EMatrixAxis eAxis) const;
3147
3165 virtual const CResult Prod(Base::CFLArray<double>* pFlaResult, EMatrixAxis eAxis) const;
3166
3178 virtual const CResult Unique(CMatrix<Ty>& matResult) const;
3179
3191 virtual const CResult Unique(CMatrix<Ty>* pMatResult) const;
3192
3208 virtual const CResult Unique(CMatrix<Ty>& matResult, EMatrixAxis eAxis) const;
3209
3225 virtual const CResult Unique(CMatrix<Ty>* pMatResult, EMatrixAxis eAxis) const;
3226
3234 virtual bool Any() const;
3235
3251 virtual const CResult Any(EMatrixAxis eAxis, CMatrix<Ty>& matResult) const;
3252
3268 virtual const CResult Any(EMatrixAxis eAxis, CMatrix<Ty>* pMatResult) const;
3269
3287 static const CResult Where(const CMatrix<Ty>& matCondition, const CMatrix<Ty>& matTrue, const CMatrix<Ty>& matFalse, CMatrix<Ty>& matResult);
3288
3306 static const CResult Where(const CMatrix<Ty>& matCondition, const CMatrix<Ty>& matTrue, const CMatrix<Ty>& matFalse, CMatrix<Ty>* pMatResult);
3307
3325 static const CResult Where(const CMatrix<Ty>* pMatCondition, const CMatrix<Ty>* pMatTrue, const CMatrix<Ty>* pMatFalse, CMatrix<Ty>& matResult);
3326
3344 static const CResult Where(const CMatrix<Ty>* pMatCondition, const CMatrix<Ty>* pMatTrue, const CMatrix<Ty>* pMatFalse, CMatrix<Ty>* pMatResult);
3345
3363 static const CResult Where(const CMatrix<Ty>& matCondition, const CMatrix<Ty>& matTrue, Ty tFalse, CMatrix<Ty>& matResult);
3364
3382 static const CResult Where(const CMatrix<Ty>& matCondition, const CMatrix<Ty>& matTrue, Ty tFalse, CMatrix<Ty>* pMatResult);
3383
3401 static const CResult Where(const CMatrix<Ty>* pMatCondition, const CMatrix<Ty>* pMatTrue, Ty tFalse, CMatrix<Ty>& matResult);
3402
3420 static const CResult Where(const CMatrix<Ty>* pMatCondition, const CMatrix<Ty>* pMatTrue, Ty tFalse, CMatrix<Ty>* pMatResult);
3421
3439 static const CResult Where(const CMatrix<Ty>& matCondition, Ty tTrue, const CMatrix<Ty>& matFalse, CMatrix<Ty>& matResult);
3440
3458 static const CResult Where(const CMatrix<Ty>& matCondition, Ty tTrue, const CMatrix<Ty>& matFalse, CMatrix<Ty>* pMatResult);
3459
3477 static const CResult Where(const CMatrix<Ty>* pMatCondition, Ty tTrue, const CMatrix<Ty>* pMatFalse, CMatrix<Ty>& matResult);
3478
3496 static const CResult Where(const CMatrix<Ty>* pMatCondition, Ty tTrue, const CMatrix<Ty>* pMatFalse, CMatrix<Ty>* pMatResult);
3497
3515 static const CResult Where(const CMatrix<Ty>& matCondition, Ty tTrue, Ty tFalse, CMatrix<Ty>& matResult);
3516
3534 static const CResult Where(const CMatrix<Ty>& matCondition, Ty tTrue, Ty tFalse, CMatrix<Ty>* pMatResult);
3535
3553 static const CResult Where(const CMatrix<Ty>* pMatCondition, Ty tTrue, Ty tFalse, CMatrix<Ty>& matResult);
3554
3572 static const CResult Where(const CMatrix<Ty>* pMatCondition, Ty tTrue, Ty tFalse, CMatrix<Ty>* pMatResult);
3573
3593 static const CResult SolveLU(CMatrix<Ty>* pMatL, CMatrix<Ty>* pMatU, CMatrix<Ty>* pMatB, CMatrix<Ty>* pMatRes);
3594
3616 static const CResult SolveLUP(CMatrix<Ty>* pMatP, CMatrix<Ty>* pMatL, CMatrix<Ty>* pMatU, CMatrix<Ty>* pMatB, CMatrix<Ty>* pMatRes);
3617
3635 static const CResult Solve(CMatrix<Ty>* pMatA, CMatrix<Ty>* pMatB, CMatrix<Ty>* pMatRes);
3636
3672 static const CResult ConjugateGradient(const CMatrix<Ty>* pMatA, const CMatrix<Ty>* pMatB, CMatrix<Ty>* pMatRes, bool bSparseMatrix = false, double f64Tolerance = 1e-5, int64_t i64MaxIteratorCount = 10000);
3673
3697 static const CResult GetSimilarity(const CFLPointArray& flpaSrcPoints, const CFLPointArray& flpaDstPoints, CMatrix<Ty>* pMatResult);
3698
3722 static const CResult GetSimilarity(const CFLPointArray* pFlpaSrcPoints, const CFLPointArray* pFlpaDstPoints, CMatrix<Ty>* pMatResult);
3723
3749 static const CResult GetSimilarity(const Base::CFLArray<Base::TPoint<Ty>>& flaSrcPoints, const Base::CFLArray<Base::TPoint<Ty>>& flaDstPoints, CMatrix<Ty>* pMatResult);
3750
3776 static const CResult GetSimilarity(const Base::CFLArray<Base::TPoint<Ty>>* pFlaSrcPoints, const Base::CFLArray<Base::TPoint<Ty>>* pFlaDstPoints, CMatrix<Ty>* pMatResult);
3777
3805 static const CResult GetSimilarity(const Base::CFLArray<Ty>& flaSrcX, const Base::CFLArray<Ty>& flaSrcY, const Base::CFLArray<Ty>& flaDstX, const Base::CFLArray<Ty>& flaDstY, CMatrix<Ty>* pMatResult);
3806
3834 static const CResult GetSimilarity(const Base::CFLArray<Ty>* pFlaSrcX, const Base::CFLArray<Ty>* pFlaSrcY, const Base::CFLArray<Ty>* pFlaDstX, const Base::CFLArray<Ty>* pFlaDstY, CMatrix<Ty>* pMatResult);
3835
3849 virtual const CResult Save(const Base::CFLString<wchar_t>& strFilePath) const;
3850
3864 virtual const CResult Save(const Base::CFLString<wchar_t>* pStrFilePath) const;
3865
3879 virtual const CResult Load(const Base::CFLString<wchar_t>& strFilePath);
3880
3894 virtual const CResult Load(const Base::CFLString<wchar_t>* pStrFilePath);
3895
3909 virtual const CResult SaveCSV(const Base::CFLString<wchar_t>& strFilePath) const;
3910
3924 virtual const CResult SaveCSV(const Base::CFLString<wchar_t>* pStrFilePath) const;
3925
3939 virtual const CResult LoadCSV(const Base::CFLString<wchar_t>& strFilePath);
3940
3954 virtual const CResult LoadCSV(const Base::CFLString<wchar_t>* pStrFilePath);
3955
3956
3967
3981 virtual const CResult SetOperationAccuracy(EAccuracy eOperationAccuracy);
3982
3990 virtual bool IsReferenceEnabled() const;
3991
3992
3993
3994 SupportToDuplicateObject(CMatrix, *this);
3995 DeclareGetClassType();
3996
3997 private:
3998 const CResult InternalGetProcessingMode(Base::CProcessingUnitCPU::EInstruction* pEMode, int32_t* pCoreCount = nullptr) const;
3999
4000 protected:
4001 Ty* m_pTVectors;
4002 Ty** m_pTVectorsYCache;
4003 int64_t m_i64Column;
4004 int64_t m_i64Row;
4005 int64_t m_i64ElementCount;
4006 int64_t m_i64TotalSizeByte;
4007 bool m_bBufferCreated;
4008 bool m_bReference;
4009 EAccuracy m_eOperationAccuracy;
4010
4011 template <typename Ty>
4012 friend class FL_EXPORT CMatrixFor3D;
4013 };
4014
4015 typedef CMatrix<float> CMatrixF;
4016 typedef CMatrix<double> CMatrixD;
4017 }
4018}
4019
4020
Template type array class.
Definition FLArray.h:71
Top-level base class of FLImaging.
Definition FLImagingBase/FLBase.h:36
Template type string class.
Definition FLString.h:34
EInstruction
Instruction.
Definition FLImagingBase/ProcessingUnitCPU.h:40
Simplified class representing a point.
Definition FLImagingBase/TPoint.h:37
FLImaging module execution result object.
Definition FLImagingBase/ResultsDef.h:1712
A base class representing array of figure.
Definition FLImagingFoundation/FLPointArray.h:26
A class representing matrix.
Definition FLImagingFoundation/Matrix.h:79
virtual const CResult SaveCSV(const Base::CFLString< wchar_t > *pStrFilePath) const
CMatrix< Ty > operator*(const float &f32Param) const
virtual const CMatrix< Ty > & operator/=(const float &f32Param)
virtual const CResult Assign(const CMatrix< float > &matrix)
virtual const CResult Fill(Ty value)
CMatrix< Ty > operator+(const double &f64Param) const
virtual const CResult Sqrt()
virtual const CResult Set(Ty *pArr2Mat, int64_t i64Row, int64_t i64Column)
virtual const CResult Log10()
virtual const CResult OnesLike(const CMatrix< double > &matShape)
static const CResult Where(const CMatrix< Ty > &matCondition, const CMatrix< Ty > &matTrue, Ty tFalse, CMatrix< Ty > *pMatResult)
virtual const CResult Std(CMatrix< Ty > &matResult, EMatrixAxis eAxis) const
CMatrix< Ty > operator-(const CMatrix< Ty > &cMat) const
CMatrix(int64_t i64Row, int64_t i64Column, Ty tFillValue)
CMatrix(const CMatrix< Ty > &matrix)
CMatrix< Ty > operator>(const CMatrix< Ty > &matOperand) const
virtual const CResult Arcsin()
virtual const CResult Min(CMatrix< Ty > *pMatResult, EMatrixAxis eAxis) const
virtual bool IsShapeEqual(const CMatrix< double > &matRhs) const
Compares whether this matrix and the target matrix have the same dimensions (Rows and Columns).
virtual const CResult Save(const Base::CFLString< wchar_t > &strFilePath) const
CMatrix< Ty > operator&&(const CMatrix< Ty > &matOperand) const
virtual CMatrix< Ty > I() const
virtual const CResult PseudoInverse()
virtual double Prod() const
virtual const CMatrix< Ty > & operator=(const CMatrix< double > *pMatrix)
virtual const CMatrix< Ty > & operator-=(const float &f32Param)
virtual const CResult Subtract(const CMatrix< Ty > &matrix)
virtual const CResult Abs()
virtual const CResult SetOperationAccuracy(EAccuracy eOperationAccuracy)
virtual const CMatrix< Ty > & operator+=(const int32_t &i32Param)
virtual const CResult GetRange(CMatrix< Ty > *pMatResult, int64_t i64StartRow=-1, int64_t i64StartColumn=-1, int64_t i64EndRow=-1, int64_t i64EndColumn=-1) const
virtual bool Any() const
virtual const CResult Assign(const Base::CFLArray< Base::CFLArray< Ty > > &fla2Matrix)
virtual const CResult CrossProduct(const CMatrix< Ty > *pMatrixSource2, CMatrix< Ty > *pMatrixDestination) const
virtual const CResult ArgMax(Base::CFLArray< int64_t > &flaResultIndex, EMatrixAxis eAxis) const
static const CResult Where(const CMatrix< Ty > &matCondition, const CMatrix< Ty > &matTrue, const CMatrix< Ty > &matFalse, CMatrix< Ty > &matResult)
virtual const CResult LU(CMatrix< Ty > *pMatrixL, CMatrix< Ty > *pMatrixU) const
virtual bool IsReferenceEnabled() const
virtual const CMatrix< Ty > & operator/=(const int64_t &i64Param)
virtual const CResult Prod(Base::CFLArray< double > *pFlaResult, EMatrixAxis eAxis) const
CMatrix< Ty > operator-(const double &f64Param) const
CMatrix< Ty > operator+(const float &f32Param) const
virtual const CResult GetRange(Base::CFLArray< Ty > *pMatResult, int64_t i64StartRow=-1, int64_t i64StartColumn=-1, int64_t i64EndRow=-1, int64_t i64EndColumn=-1) const
virtual const CResult Add(const CMatrix< Ty > &matrix)
virtual const CResult Log2()
virtual const CResult Min(CMatrix< Ty > &matResult, EMatrixAxis eAxis) const
virtual const CResult HStack(const CMatrix< Ty > &matInput, CMatrix< Ty > *pMatResult=nullptr)
virtual const CResult Multiply(const CMatrix< Ty > *pMatrix, CMatrix< Ty > *pTargetMatrix) const
virtual bool IsEqual(const CMatrix< float > &matRhs) const
Compares whether this matrix and the target matrix have the same shape and element values within a de...
virtual const CResult LinSpace(Ty tRangeStart, Ty tRangeEnd)
static const CResult Where(const CMatrix< Ty > &matCondition, Ty tTrue, const CMatrix< Ty > &matFalse, CMatrix< Ty > *pMatResult)
virtual const CResult Assign(const CMatrix< float > *pMatrix)
virtual const CResult ZerosLike(const CMatrix< float > &matShape)
CMatrix< Ty > operator!=(const double &f64Param) const
virtual const CResult MulTransposed(const CMatrix< Ty > *pMatrixSource, CMatrix< Ty > *pMatrixDestination, int32_t i32Order, CMatrix< Ty > *pMatDelta=nullptr, double f64Scale=1.) const
virtual const CResult Transpose(CMatrix< Ty > *pTargetMatrix) const
static const CResult Where(const CMatrix< Ty > *pMatCondition, const CMatrix< Ty > *pMatTrue, Ty tFalse, CMatrix< Ty > *pMatResult)
virtual const CResult Log1p()
CMatrix< Ty > operator-(const int64_t &i64Param) const
virtual const CResult SVD(CMatrix< Ty > *pMatrixU, CMatrix< Ty > *pMatrixSig, CMatrix< Ty > *pMatrixVT) const
virtual const CResult FullLike(const CMatrix< double > &matShape, Ty tFillValue)
virtual const CResult Assign(const Base::CFLArray< Base::CFLArray< Ty > > *pFla2Matrix)
static const CResult Where(const CMatrix< Ty > *pMatCondition, const CMatrix< Ty > *pMatTrue, Ty tFalse, CMatrix< Ty > &matResult)
virtual const CResult ZerosLike(const CMatrix< float > *pMatShape)
virtual const CResult Arccos()
virtual const CResult MultiplyElementwise(const CMatrix< Ty > *pMatrix, CMatrix< Ty > *pTargetMatrix) const
virtual const CResult Floor()
virtual const CResult Sin()
virtual const CResult Swap(CMatrix< Ty > *pMatRight)
virtual Ty * GetValue(int64_t i64Row, int64_t i64Column) const
virtual const CResult Multiply(const int64_t &i64Scalar)
virtual const CResult Round()
virtual int64_t GetRowSizeByte() const
virtual const CResult Assign(const CMatrix< double > *pMatrix)
virtual const CResult Arctan2(const CMatrix< Ty > &matrixX)
CMatrix< Ty > operator%(const CMatrix< Ty > &matOperand) const
virtual const Ty * operator[](int32_t i32Index) const
virtual Ty * operator[](int32_t i32Index)
virtual const CMatrix< Ty > & operator-=(const int32_t &i32Param)
virtual bool IsEqual(const CMatrix< double > &matRhs) const
Compares whether this matrix and the target matrix have the same shape and element values within a de...
CMatrix< Ty > operator*(const CMatrix< Ty > &cMat) const
virtual const CMatrix< Ty > & operator=(const CMatrix< float > *pMatrix)
virtual const CResult Dot(const CMatrix< Ty > *pMatInput, CMatrix< Ty > *pMatResult) const
virtual bool IsEqual(const CMatrix< double > *pMatRhs, double f64Tolerance) const
Compares whether this matrix and the target matrix have the same shape and element values within a sp...
virtual const CResult LoadCSV(const Base::CFLString< wchar_t > &strFilePath)
virtual CMatrix< Ty > U() const
virtual bool IsShapeEqual(const CMatrix< float > *pMatRhs) const
Compares whether this matrix and the target matrix have the same dimensions (Rows and Columns).
virtual const CResult Ones(int64_t i64Row, int64_t i64Column)
virtual const CResult Reshape(int64_t i64Row, int64_t i64Column=-1)
static const CResult GetSimilarity(const Base::CFLArray< Ty > &flaSrcX, const Base::CFLArray< Ty > &flaSrcY, const Base::CFLArray< Ty > &flaDstX, const Base::CFLArray< Ty > &flaDstY, CMatrix< Ty > *pMatResult)
virtual const CResult ArgMax(Base::CFLArray< int64_t > *pFlaResultIndex, EMatrixAxis eAxis) const
virtual const CMatrix< Ty > & operator=(const CMatrix< float > &matrix)
virtual const CResult Create(const CMatrix< double > &matShape, Ty tFillValue=0)
static const CResult Where(const CMatrix< Ty > *pMatCondition, Ty tTrue, Ty tFalse, CMatrix< Ty > *pMatResult)
virtual const CResult Zeros(int64_t i64Row, int64_t i64Column)
static const CResult GetSimilarity(const CFLPointArray *pFlpaSrcPoints, const CFLPointArray *pFlpaDstPoints, CMatrix< Ty > *pMatResult)
virtual bool IsEqual(const CMatrix< double > *pMatRhs) const
Compares whether this matrix and the target matrix have the same shape and element values within a de...
virtual const CResult LUP(CMatrix< Ty > *pMatrixP, CMatrix< Ty > *pMatrixL, CMatrix< Ty > *pMatrixU) const
virtual const CMatrix< Ty > & operator/=(const CMatrix< Ty > &cMat)
virtual const Ty * operator[](int64_t i64Index) const
static const CResult GetSimilarity(const CFLPointArray &flpaSrcPoints, const CFLPointArray &flpaDstPoints, CMatrix< Ty > *pMatResult)
virtual const CResult SetDiagonal(Ty tVal)
virtual const CResult MultiplyElementwise(const CMatrix< Ty > &matrix)
virtual const CResult ReduceMin(const EMatrixReduceType eReduceType, CMatrix< Ty > *pMatResult) const
virtual const CResult FillZero()
virtual const CResult Degrees()
virtual const CResult ReduceMean(const EMatrixReduceType eReduceType, CMatrix< Ty > *pMatResult) const
static const CResult Where(const CMatrix< Ty > *pMatCondition, const CMatrix< Ty > *pMatTrue, const CMatrix< Ty > *pMatFalse, CMatrix< Ty > &matResult)
CMatrix< Ty > operator/(const double &f64Param) const
virtual const CResult Arctan2(const CMatrix< Ty > *pMatrixX)
CMatrix< Ty > operator%(const double &f64Param) const
virtual const CMatrix< Ty > & operator+=(const int64_t &i64Param)
virtual const CResult Multiply(const CMatrix< Ty > *pMatrix)
virtual const CResult Diff(CMatrix< Ty > *pMatResult, EMatrixAxis eAxis=EMatrixAxis_Column, int64_t i64Depth=1) const
virtual const CResult MultiplyElementwise(const CMatrix< Ty > *pMatrix)
virtual const CResult Unique(CMatrix< Ty > *pMatResult, EMatrixAxis eAxis) const
virtual const CResult Multiply(const CMatrix< Ty > &matrix)
virtual const CResult ZerosLike(const CMatrix< double > &matShape)
virtual const CResult MultiplyElementwise(const CMatrix< Ty > &matrix, CMatrix< Ty > *pTargetMatrix) const
CMatrix< Ty > operator+(const int32_t &i32Param) const
static const CResult Where(const CMatrix< Ty > *pMatCondition, Ty tTrue, const CMatrix< Ty > *pMatFalse, CMatrix< Ty > *pMatResult)
CMatrix< Ty > operator/(const CMatrix< Ty > &cMat) const
virtual const CMatrix< Ty > & operator=(const CMatrix< double > &matrix)
CMatrix< Ty > operator+(const int64_t &i64Param) const
virtual const CResult Subtract(const CMatrix< Ty > *pMatrix, CMatrix< Ty > *pTargetMatrix) const
virtual int64_t GetElementCount() const
virtual const CMatrix< Ty > & operator%=(const double &f64Param)
virtual const CResult OnesLike(const CMatrix< float > *pMatShape)
virtual const CResult Load(const Base::CFLString< wchar_t > *pStrFilePath)
virtual const CResult FullLike(const CMatrix< float > &matShape, Ty tFillValue)
virtual const CResult SetDiagonal(Ty tVal, CMatrix< Ty > *pTargetMatrix) const
virtual const CResult PseudoInverse(CMatrix< Ty > *pTargetMatrix) const
virtual const CResult VStack(const CMatrix< Ty > &matInput, CMatrix< Ty > *pMatResult=nullptr)
virtual Ty ** GetYCache() const
CMatrix< float > operator<(const double &f64Param) const
static const CResult Where(const CMatrix< Ty > *pMatCondition, const CMatrix< Ty > *pMatTrue, const CMatrix< Ty > *pMatFalse, CMatrix< Ty > *pMatResult)
virtual const CMatrix< Ty > & operator-=(const CMatrix< Ty > &cMat)
virtual const CMatrix< Ty > & operator*=(const int64_t &i64Param)
static const CResult Where(const CMatrix< Ty > &matCondition, Ty tTrue, Ty tFalse, CMatrix< Ty > *pMatResult)
virtual const CResult ArgSort(CMatrix< Ty > *pMatResultIndex=nullptr, EMatrixSortOrder eOrder=EMatrixSortOrder_Ascending, EMatrixAxis eAxis=EMatrixAxis_Column)
virtual const CResult QR(CMatrix< Ty > *pMatrixQ, CMatrix< Ty > *pMatrixR) const
virtual const CResult Add(const CMatrix< Ty > *pMatrix)
virtual const CResult ArgMax(int64_t &i64ResultRow, int64_t &i64ResultColumn) const
CMatrix< Ty > operator/(const int64_t &i64Param) const
virtual const CResult Subtract(const CMatrix< Ty > *pMatrix)
virtual const CResult HStack(const CMatrix< Ty > *pMatInput, CMatrix< Ty > *pMatResult=nullptr)
CMatrix< Ty > operator-(const int32_t &i32Param) const
virtual const CResult Full(int64_t i64Row, int64_t i64Column, Ty tFillValue)
CMatrix(const CMatrix< Ty > *pMatrix)
virtual const CResult Create(const CMatrix< double > *pMatShape, Ty tFillValue=0)
virtual const CResult Transpose()
virtual const CResult Swap(CMatrix< Ty > &matRight)
static const CResult Where(const CMatrix< Ty > &matCondition, const CMatrix< Ty > &matTrue, const CMatrix< Ty > &matFalse, CMatrix< Ty > *pMatResult)
virtual Ty * GetBuffer() const
virtual const CResult Mean(CMatrix< Ty > *pMatResult, EMatrixAxis eAxis) const
static const CResult Solve(CMatrix< Ty > *pMatA, CMatrix< Ty > *pMatB, CMatrix< Ty > *pMatRes)
virtual const CMatrix< Ty > & operator*=(const CMatrix< Ty > &cMat)
virtual const CResult Std(CMatrix< Ty > *pMatResult, EMatrixAxis eAxis) const
virtual const CResult Multiply(const double &f64Scalar)
virtual const CMatrix< Ty > & operator*=(const double &f64Param)
virtual CMatrix< Ty > T() const
virtual const CResult FillRandom(Ty tRangeMin, Ty tRangeMax)
virtual const CMatrix< Ty > & operator+=(const CMatrix< Ty > &cMat)
static const CResult GetSimilarity(const Base::CFLArray< Ty > *pFlaSrcX, const Base::CFLArray< Ty > *pFlaSrcY, const Base::CFLArray< Ty > *pFlaDstX, const Base::CFLArray< Ty > *pFlaDstY, CMatrix< Ty > *pMatResult)
virtual const CResult Dot(const CMatrix< Ty > *pMatInput)
virtual const CResult ArgMin(Base::CFLArray< int64_t > &flaResultIndex, EMatrixAxis eAxis) const
virtual const CResult LoadCSV(const Base::CFLString< wchar_t > *pStrFilePath)
CMatrix< Ty > operator*(const double &f64Param) const
static const CResult Where(const CMatrix< Ty > &matCondition, Ty tTrue, Ty tFalse, CMatrix< Ty > &matResult)
virtual const CResult Any(EMatrixAxis eAxis, CMatrix< Ty > *pMatResult) const
virtual const CResult GetRange(Base::CFLArray< Base::CFLArray< Ty > > *pMatResult, int64_t i64StartRow=-1, int64_t i64StartColumn=-1, int64_t i64EndRow=-1, int64_t i64EndColumn=-1) const
virtual const CResult Create(const CMatrix< float > &matShape, Ty tFillValue=0)
virtual const CResult Sum(CMatrix< Ty > &matResult, EMatrixAxis eAxis) const
virtual const CResult Schur(CMatrix< Ty > *pMatrixU, CMatrix< Ty > *pMatrixT) const
virtual const CResult Log()
virtual const CResult SetValue(int64_t i64Row, int64_t i64Column, Ty value)
virtual const CResult GetRangeRef(CMatrix< Ty > *pMatResult, int64_t i64StartRow=-1, int64_t i64StartColumn=-1, int64_t i64EndRow=-1, int64_t i64EndColumn=-1) const
virtual const CMatrix< Ty > & operator*=(const int32_t &i32Param)
virtual const CMatrix< Ty > & operator+=(const float &f32Param)
CMatrix< float > operator>(const double &f64Param) const
virtual const CResult Max(CMatrix< Ty > &matResult, EMatrixAxis eAxis) const
virtual const CResult OnesLike(const CMatrix< double > *pMatShape)
virtual const CResult Any(EMatrixAxis eAxis, CMatrix< Ty > &matResult) const
virtual int64_t GetColumn() const
virtual const CResult SaveCSV(const Base::CFLString< wchar_t > &strFilePath) const
virtual const CResult CrossProduct(const CMatrix< Ty > &matrixSource2, CMatrix< Ty > *pMatrixDestination) const
virtual const CResult Radians()
virtual const CResult FillLinear(Ty tRangeStart, Ty tRangeEnd)
virtual bool IsValid() const override
static const CResult SolveLU(CMatrix< Ty > *pMatL, CMatrix< Ty > *pMatU, CMatrix< Ty > *pMatB, CMatrix< Ty > *pMatRes)
virtual const CResult Unique(CMatrix< Ty > &matResult) const
virtual const CResult OnesLike(const CMatrix< float > &matShape)
virtual const CMatrix< Ty > & operator*=(const float &f32Param)
static const CResult GetSimilarity(const Base::CFLArray< Base::TPoint< Ty > > &flaSrcPoints, const Base::CFLArray< Base::TPoint< Ty > > &flaDstPoints, CMatrix< Ty > *pMatResult)
virtual const CResult Subtract(const CMatrix< Ty > &matrix, CMatrix< Ty > *pTargetMatrix) const
virtual const CResult Invert(CMatrix< Ty > *pTargetMatrix) const
virtual const CResult Clip(Ty tMin, Ty tMax)
static const CResult Where(const CMatrix< Ty > *pMatCondition, Ty tTrue, const CMatrix< Ty > *pMatFalse, CMatrix< Ty > &matResult)
static const CResult Where(const CMatrix< Ty > &matCondition, const CMatrix< Ty > &matTrue, Ty tFalse, CMatrix< Ty > &matResult)
virtual const CResult Assign(const CMatrix< double > &matrix)
virtual const CResult ArgMin(int64_t &i64ResultRow, int64_t &i64ResultColumn) const
virtual const CResult Multiply(const int32_t &i32Scalar)
virtual const CResult Cos()
virtual const CResult Create(int64_t i64Row, int64_t i64Column, bool bFillZero=true)
virtual const CResult Unit()
virtual bool IsEqual(const CMatrix< float > *pMatRhs, double f64Tolerance) const
Compares whether this matrix and the target matrix have the same shape and element values within a sp...
virtual double Determinant() const
static const CResult ConjugateGradient(const CMatrix< Ty > *pMatA, const CMatrix< Ty > *pMatB, CMatrix< Ty > *pMatRes, bool bSparseMatrix=false, double f64Tolerance=1e-5, int64_t i64MaxIteratorCount=10000)
CMatrix< Ty > operator/(const int32_t &i32Param) const
virtual const CResult Invert()
CMatrix< Ty > operator/(const float &f32Param) const
virtual const CResult Multiply(const CMatrix< Ty > &matrix, CMatrix< Ty > *pTargetMatrix) const
virtual EAccuracy GetOperationAccuracy()
virtual int64_t GetTotalSizeByte() const
virtual bool IsEqual(const CMatrix< double > &matRhs, double f64Tolerance) const
Compares whether this matrix and the target matrix have the same shape and element values within a sp...
virtual bool IsEqual(const CMatrix< float > &matRhs, double f64Tolerance) const
Compares whether this matrix and the target matrix have the same shape and element values within a sp...
virtual int64_t GetRow() const
virtual CMatrix< Ty > P() const
virtual const CResult ZerosLike(const CMatrix< double > *pMatShape)
virtual const CResult Sum(CMatrix< Ty > *pMatResult, EMatrixAxis eAxis) const
virtual const CResult Diff(CMatrix< Ty > &matResult, EMatrixAxis eAxis=EMatrixAxis_Column, int64_t i64Depth=1) const
virtual const CMatrix< Ty > & operator=(const Base::CFLArray< Base::CFLArray< Ty > > &fla2Matrix)
virtual const CResult Multiply(const float &f32Scalar)
static const CResult Where(const CMatrix< Ty > *pMatCondition, Ty tTrue, Ty tFalse, CMatrix< Ty > &matResult)
virtual bool IsShapeEqual(const CMatrix< float > &matRhs) const
Compares whether this matrix and the target matrix have the same dimensions (Rows and Columns).
virtual const CMatrix< Ty > & operator-=(const int64_t &i64Param)
virtual const CResult Save(const Base::CFLString< wchar_t > *pStrFilePath) const
virtual const CResult Tan()
virtual bool operator!=(const CMatrix< Ty > &cMat) const
virtual EMatrixTemplateType GetTemplateType() const
virtual bool IsShapeEqual(const CMatrix< double > *pMatRhs) const
Compares whether this matrix and the target matrix have the same dimensions (Rows and Columns).
virtual const CMatrix< Ty > & operator+=(const double &f64Param)
CMatrix< Ty > operator==(const double &f64Param) const
virtual const CResult Add(const CMatrix< Ty > &matrix, CMatrix< Ty > *pTargetMatrix) const
virtual bool IsEqual(const CMatrix< float > *pMatRhs) const
Compares whether this matrix and the target matrix have the same shape and element values within a de...
CMatrix< Ty > operator*(const int64_t &i64Param) const
virtual const CResult ReduceMax(const EMatrixReduceType eReduceType, CMatrix< Ty > *pMatResult) const
static const CResult GetSimilarity(const Base::CFLArray< Base::TPoint< Ty > > *pFlaSrcPoints, const Base::CFLArray< Base::TPoint< Ty > > *pFlaDstPoints, CMatrix< Ty > *pMatResult)
virtual const CResult Ceil()
virtual bool operator==(const CMatrix< Ty > &cMat) const
virtual const CResult Unique(CMatrix< Ty > &matResult, EMatrixAxis eAxis) const
static const CResult Where(const CMatrix< Ty > &matCondition, Ty tTrue, const CMatrix< Ty > &matFalse, CMatrix< Ty > &matResult)
virtual bool CheckRange(Ty tMin, Ty tMax) const
CMatrix(int64_t i64Row, int64_t i64Column)
virtual const CResult ArgMin(Base::CFLArray< int64_t > *pFlaResultIndex, EMatrixAxis eAxis) const
virtual const CResult VStack(const CMatrix< Ty > *pMatInput, CMatrix< Ty > *pMatResult=nullptr)
virtual const CResult Unit(CMatrix< Ty > *pTargetMatrix) const
virtual const CResult Prod(Base::CFLArray< double > &flaResult, EMatrixAxis eAxis) const
virtual int64_t GetColumnSizeByte() const
virtual const CResult Add(const CMatrix< Ty > *pMatrix, CMatrix< Ty > *pTargetMatrix) const
virtual const CResult FullLike(const CMatrix< double > *pMatShape, Ty tFillValue)
CMatrix< Ty > operator-(const float &f32Param) const
CMatrix< Ty > operator+(const CMatrix< Ty > &cMat) const
virtual const CResult Unique(CMatrix< Ty > *pMatResult) const
virtual const CResult Create(const CMatrix< float > *pMatShape, Ty tFillValue=0)
virtual const CMatrix< Ty > & operator/=(const double &f64Param)
virtual const CMatrix< Ty > & operator-=(const double &f64Param)
virtual const CMatrix< Ty > & operator/=(const int32_t &i32Param)
virtual const CResult Mean(CMatrix< Ty > &matResult, EMatrixAxis eAxis) const
virtual const CResult Max(CMatrix< Ty > *pMatResult, EMatrixAxis eAxis) const
virtual Ty * operator[](int64_t i64Index)
virtual const CResult ReduceSum(const EMatrixReduceType eReduceType, CMatrix< Ty > *pMatResult) const
virtual Ty GetNorm(const Ty tP=2) const
virtual const CResult Load(const Base::CFLString< wchar_t > &strFilePath)
virtual const CResult FullLike(const CMatrix< float > *pMatShape, Ty tFillValue)
static const CResult SolveLUP(CMatrix< Ty > *pMatP, CMatrix< Ty > *pMatL, CMatrix< Ty > *pMatU, CMatrix< Ty > *pMatB, CMatrix< Ty > *pMatRes)
CMatrix< Ty > operator*(const int32_t &i32Param) const
virtual const CResult Hessenberg(CMatrix< Ty > *pMatrixH, CMatrix< Ty > *pMatrixP=nullptr) const
virtual const CResult Assign(Ty *pArr2Mat, int64_t i64Row, int64_t i64Column)
Definition FLImagingFoundation/AlgorithmBase.h:16
EMatrixTemplateType
matrix data datatype type
Definition FLImagingFoundation/Matrix.h:28
@ EMatrixTemplateType_Double
Definition FLImagingFoundation/Matrix.h:39
@ EMatrixTemplateType_Float
Definition FLImagingFoundation/Matrix.h:33
EAccuracy
Accuracy.
Definition FLImagingFoundation/DefinitionsMathematics.h:144
EMatrixReduceType
matrix dimension reduction direction type
Definition FLImagingFoundation/Matrix.h:51
@ EMatrixReduceType_Both
Definition FLImagingFoundation/Matrix.h:56
@ EMatrixReduceType_Column
Definition FLImagingFoundation/Matrix.h:66
@ EMatrixReduceType_Row
Definition FLImagingFoundation/Matrix.h:61
EMatrixAxis
Definition FLImagingFoundation/DefinitionsMathematics.h:407
@ EMatrixAxis_Column
Definition FLImagingFoundation/DefinitionsMathematics.h:418
EMatrixSortOrder
Definition FLImagingFoundation/DefinitionsMathematics.h:429
@ EMatrixSortOrder_Ascending
Sort in ascending order.
Definition FLImagingFoundation/DefinitionsMathematics.h:436