15 #ifndef __IPSDKMATH_LINEARALGEBRAUTILS_H__ 16 #define __IPSDKMATH_LINEARALGEBRAUTILS_H__ 38 Vector::const_iterator iter0 = v0.begin();
39 Vector::const_iterator iter1 = v1.begin();
40 while (iter0 != v0.end()) {
47 const ipReal64 delta = curValue0 - curValue1;
68 template <
typename ArrayType>
70 fromUBlas(
const boost::numeric::ublas::vector<ipReal64, ArrayType>& inputVector)
72 std::vector<ipReal64> outputVector;
77 template <
typename ArrayType>
79 fromUBlas(
const boost::numeric::ublas::vector<ipReal64, ArrayType>& inputVector,
80 std::vector<ipReal64>& outputVector)
83 outputVector.reserve(inputVector.size());
84 boost::numeric::ublas::vector<ipReal64>::const_iterator iter = inputVector.begin();
85 while (iter != inputVector.end()) {
87 outputVector.push_back(*iter);
93 toUBlas(
const std::vector<ipReal64>& inputVector);
95 toUBlas(
const std::vector<ipReal64>& inputVector,
101 template <
typename ArrayType>
102 std::vector<ipReal64>
103 fromUBlas(
const boost::numeric::ublas::matrix<ipReal64, boost::numeric::ublas::row_major, ArrayType>& inputMatrix)
105 std::vector<ipReal64> outputVector;
110 template <
typename ArrayType>
112 fromUBlas(
const boost::numeric::ublas::matrix<ipReal64, boost::numeric::ublas::row_major, ArrayType>& inputMatrix,
113 std::vector<ipReal64>& outputVector)
115 outputVector.clear();
116 outputVector.reserve(inputMatrix.data().size());
117 boost::numeric::ublas::vector<ipReal64>::const_iterator iter = inputMatrix.data().begin();
118 while (iter != inputMatrix.data().end()) {
120 outputVector.push_back(*iter);
126 toUBlas(
const std::vector<ipReal64>& inputVector,
130 toUBlas(
const std::vector<ipReal64>& inputVector,
135 template <
typename ArrayType1,
typename ArrayType2>
137 equal(
const boost::numeric::ublas::matrix<ipReal64, boost::numeric::ublas::row_major, ArrayType1>& mat1,
138 const boost::numeric::ublas::matrix<ipReal64, boost::numeric::ublas::row_major, ArrayType2>& mat2)
140 const ipReal64 normDiff = boost::numeric::ublas::norm_frobenius(mat1 - mat2);
142 return normDiff == 0;
146 template <
typename ArrayType1,
typename ArrayType2>
148 compare(
const boost::numeric::ublas::matrix<ipReal64, boost::numeric::ublas::row_major, ArrayType1>& mat1,
149 const boost::numeric::ublas::matrix<ipReal64, boost::numeric::ublas::row_major, ArrayType2>& mat2,
152 const ipReal64 normDiff = boost::numeric::ublas::norm_frobenius(mat1 - mat2);
154 return normDiff < epsilonValue;
159 template <
typename ArrayType1,
typename ArrayType2>
161 compareRelative(
const boost::numeric::ublas::matrix<ipReal64, boost::numeric::ublas::row_major, ArrayType1>& mat1,
162 const boost::numeric::ublas::matrix<ipReal64, boost::numeric::ublas::row_major, ArrayType2>& mat2,
165 const ipReal64 norm1 = boost::numeric::ublas::norm_frobenius(mat1);
166 const ipReal64 norm2 = boost::numeric::ublas::norm_frobenius(mat2);
167 const ipReal64 normDiff = boost::numeric::ublas::norm_frobenius(mat1 - mat2);
169 return normDiff < epsilonValue *
std::max(norm1, norm2);
173 template <
typename ArrayType1,
typename ArrayType2>
175 equal(
const boost::numeric::ublas::vector<ipReal64, ArrayType1>& vec1,
176 const boost::numeric::ublas::vector<ipReal64, ArrayType2>& vec2)
178 const ipReal64 normDiff = boost::numeric::ublas::norm_2(vec1 - vec2);
180 return normDiff == 0;
184 template <
typename ArrayType1,
typename ArrayType2>
186 compare(
const boost::numeric::ublas::vector<ipReal64, ArrayType1>& vec1,
187 const boost::numeric::ublas::vector<ipReal64, ArrayType2>& vec2,
190 const ipReal64 normDiff = boost::numeric::ublas::norm_2(vec1 - vec2);
192 return normDiff < epsilonValue;
197 template <
typename ArrayType1,
typename ArrayType2>
200 const boost::numeric::ublas::vector<ipReal64, ArrayType2>& vec2,
203 const ipReal64 norm1 = boost::numeric::ublas::norm_2(vec1);
204 const ipReal64 norm2 = boost::numeric::ublas::norm_2(vec2);
205 const ipReal64 normDiff = boost::numeric::ublas::norm_2(vec1 - vec2);
207 return normDiff < epsilonValue *
std::max(norm1, norm2);
216 #endif // __IPSDKMATH_LINEARALGEBRAUTILS_H__ Definition of import/export macro for library.
boost::numeric::ublas::matrix< ipReal64 > Matrix
matrix type associated to library
Definition: LinearAlgebraTypes.h:48
Defines the IPSDK_FORCEINLINE.
bool compare(const boost::numeric::ublas::matrix< ipReal64, boost::numeric::ublas::row_major, ArrayType1 > &mat1, const boost::numeric::ublas::matrix< ipReal64, boost::numeric::ublas::row_major, ArrayType2 > &mat2, const ipReal64 epsilonValue=NumericLimits< ipReal64 >::sqrt_epsilon())
matrix comparison with tolerance on frobenius norm of difference
Definition: LinearAlgebraUtils.h:148
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Predefined types for linear algebra management.
IPSDK_FORCEINLINE PackT sqrt(const PackT &in)
returns the square root of a pack
Definition: sqrt.h:40
double ipReal64
Base types definition.
Definition: BaseTypes.h:57
Definition: NumericLimits.h:27
Predefined constants for ipsdk math library.
IPSDK_FORCEINLINE PackT max(const PackT &in1, const PackT &in2)
returns the maximum of 2 packs
Definition: max.h:40
boost::numeric::ublas::vector< ipReal64 > Vector
vector type associated to library
Definition: LinearAlgebraTypes.h:36
#define IPSDKMATH_API
Import/Export macro for library IPSDKMath.
Definition: IPSDKMathExports.h:27
bool compareRelative(const boost::numeric::ublas::matrix< ipReal64, boost::numeric::ublas::row_major, ArrayType1 > &mat1, const boost::numeric::ublas::matrix< ipReal64, boost::numeric::ublas::row_major, ArrayType2 > &mat2, const ipReal64 epsilonValue=NumericLimits< ipReal64 >::sqrt_epsilon())
Definition: LinearAlgebraUtils.h:161
IPSDKMATH_API ipsdk::math::Vector toUBlas(const std::vector< ipReal64 > &inputVector)
convert a math Vector from and to an std vector
std::vector< ipReal64 > fromUBlas(const boost::numeric::ublas::vector< ipReal64, ArrayType > &inputVector)
convert a math Vector from and to an std vector
Definition: LinearAlgebraUtils.h:70
bool equal(const boost::numeric::ublas::matrix< ipReal64, boost::numeric::ublas::row_major, ArrayType1 > &mat1, const boost::numeric::ublas::matrix< ipReal64, boost::numeric::ublas::row_major, ArrayType2 > &mat2)
check for matrix equality
Definition: LinearAlgebraUtils.h:137
IPSDK_FORCEINLINE ipReal64 euclidian_distance(const ipsdk::math::Vector &v0, const ipsdk::math::Vector &v1)
function allowing to compute euclidian distance between two vectors
Definition: LinearAlgebraUtils.h:60
IPSDK_FORCEINLINE ipReal64 comparable_distance(const ipsdk::math::Vector &v0, const ipsdk::math::Vector &v1)
function allowing to compute comparable distance between two vectors
Definition: LinearAlgebraUtils.h:33
uint32_t ipUInt32
Base types definition.
Definition: BaseTypes.h:53