MCPcopy Create free account
hub / github.com/PX4/eigen / array_for_matrix

Function array_for_matrix

test/array_for_matrix.cpp:12–81  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10#include "main.h"
11
12template<typename MatrixType> void array_for_matrix(const MatrixType& m)
13{
14 typedef typename MatrixType::Index Index;
15 typedef typename MatrixType::Scalar Scalar;
16 typedef Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> ColVectorType;
17 typedef Matrix<Scalar, 1, MatrixType::ColsAtCompileTime> RowVectorType;
18
19 Index rows = m.rows();
20 Index cols = m.cols();
21
22 MatrixType m1 = MatrixType::Random(rows, cols),
23 m2 = MatrixType::Random(rows, cols),
24 m3(rows, cols);
25
26 ColVectorType cv1 = ColVectorType::Random(rows);
27 RowVectorType rv1 = RowVectorType::Random(cols);
28
29 Scalar s1 = internal::random<Scalar>(),
30 s2 = internal::random<Scalar>();
31
32 // scalar addition
33 VERIFY_IS_APPROX(m1.array() + s1, s1 + m1.array());
34 VERIFY_IS_APPROX((m1.array() + s1).matrix(), MatrixType::Constant(rows,cols,s1) + m1);
35 VERIFY_IS_APPROX(((m1*Scalar(2)).array() - s2).matrix(), (m1+m1) - MatrixType::Constant(rows,cols,s2) );
36 m3 = m1;
37 m3.array() += s2;
38 VERIFY_IS_APPROX(m3, (m1.array() + s2).matrix());
39 m3 = m1;
40 m3.array() -= s1;
41 VERIFY_IS_APPROX(m3, (m1.array() - s1).matrix());
42
43 // reductions
44 VERIFY_IS_MUCH_SMALLER_THAN(m1.colwise().sum().sum() - m1.sum(), m1.squaredNorm());
45 VERIFY_IS_MUCH_SMALLER_THAN(m1.rowwise().sum().sum() - m1.sum(), m1.squaredNorm());
46 VERIFY_IS_MUCH_SMALLER_THAN(m1.colwise().sum() + m2.colwise().sum() - (m1+m2).colwise().sum(), (m1+m2).squaredNorm());
47 VERIFY_IS_MUCH_SMALLER_THAN(m1.rowwise().sum() - m2.rowwise().sum() - (m1-m2).rowwise().sum(), (m1-m2).squaredNorm());
48 VERIFY_IS_APPROX(m1.colwise().sum(), m1.colwise().redux(internal::scalar_sum_op<Scalar,Scalar>()));
49
50 // vector-wise ops
51 m3 = m1;
52 VERIFY_IS_APPROX(m3.colwise() += cv1, m1.colwise() + cv1);
53 m3 = m1;
54 VERIFY_IS_APPROX(m3.colwise() -= cv1, m1.colwise() - cv1);
55 m3 = m1;
56 VERIFY_IS_APPROX(m3.rowwise() += rv1, m1.rowwise() + rv1);
57 m3 = m1;
58 VERIFY_IS_APPROX(m3.rowwise() -= rv1, m1.rowwise() - rv1);
59
60 // empty objects
61 VERIFY_IS_APPROX(m1.block(0,0,0,cols).colwise().sum(), RowVectorType::Zero(cols));
62 VERIFY_IS_APPROX(m1.block(0,0,rows,0).rowwise().prod(), ColVectorType::Ones(rows));
63
64 // verify the const accessors exist
65 const Scalar& ref_m1 = m.matrix().array().coeffRef(0);
66 const Scalar& ref_m2 = m.matrix().array().coeffRef(0,0);
67 const Scalar& ref_a1 = m.array().matrix().coeffRef(0);
68 const Scalar& ref_a2 = m.array().matrix().coeffRef(0,0);
69 VERIFY(&ref_a1 == &ref_m1);

Callers 1

test_array_for_matrixFunction · 0.85

Calls 11

colwiseMethod · 0.80
rowwiseMethod · 0.80
rowsMethod · 0.45
colsMethod · 0.45
arrayMethod · 0.45
matrixMethod · 0.45
sumMethod · 0.45
squaredNormMethod · 0.45
reduxMethod · 0.45
prodMethod · 0.45
coeffRefMethod · 0.45

Tested by 1

test_array_for_matrixFunction · 0.68