MCPcopy Create free account
hub / github.com/avaxman/Directional / array_for_matrix

Function array_for_matrix

external/eigen/test/array_for_matrix.cpp:12–87  ·  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::Scalar Scalar;
15 typedef Matrix<Scalar, MatrixType::RowsAtCompileTime, 1> ColVectorType;
16 typedef Matrix<Scalar, 1, MatrixType::ColsAtCompileTime> RowVectorType;
17
18 Index rows = m.rows();
19 Index cols = m.cols();
20
21 MatrixType m1 = MatrixType::Random(rows, cols),
22 m2 = MatrixType::Random(rows, cols),
23 m3(rows, cols);
24
25 ColVectorType cv1 = ColVectorType::Random(rows);
26 RowVectorType rv1 = RowVectorType::Random(cols);
27
28 Scalar s1 = internal::random<Scalar>(),
29 s2 = internal::random<Scalar>();
30
31 // scalar addition
32 VERIFY_IS_APPROX(m1.array() + s1, s1 + m1.array());
33 VERIFY_IS_APPROX((m1.array() + s1).matrix(), MatrixType::Constant(rows,cols,s1) + m1);
34 VERIFY_IS_APPROX(((m1*Scalar(2)).array() - s2).matrix(), (m1+m1) - MatrixType::Constant(rows,cols,s2) );
35 m3 = m1;
36 m3.array() += s2;
37 VERIFY_IS_APPROX(m3, (m1.array() + s2).matrix());
38 m3 = m1;
39 m3.array() -= s1;
40 VERIFY_IS_APPROX(m3, (m1.array() - s1).matrix());
41
42 // reductions
43 VERIFY_IS_MUCH_SMALLER_THAN(m1.colwise().sum().sum() - m1.sum(), m1.squaredNorm());
44 VERIFY_IS_MUCH_SMALLER_THAN(m1.rowwise().sum().sum() - m1.sum(), m1.squaredNorm());
45 VERIFY_IS_MUCH_SMALLER_THAN(m1.colwise().sum() + m2.colwise().sum() - (m1+m2).colwise().sum(), (m1+m2).squaredNorm());
46 VERIFY_IS_MUCH_SMALLER_THAN(m1.rowwise().sum() - m2.rowwise().sum() - (m1-m2).rowwise().sum(), (m1-m2).squaredNorm());
47 VERIFY_IS_APPROX(m1.colwise().sum(), m1.colwise().redux(internal::scalar_sum_op<Scalar,Scalar>()));
48
49 // vector-wise ops
50 m3 = m1;
51 VERIFY_IS_APPROX(m3.colwise() += cv1, m1.colwise() + cv1);
52 m3 = m1;
53 VERIFY_IS_APPROX(m3.colwise() -= cv1, m1.colwise() - cv1);
54 m3 = m1;
55 VERIFY_IS_APPROX(m3.rowwise() += rv1, m1.rowwise() + rv1);
56 m3 = m1;
57 VERIFY_IS_APPROX(m3.rowwise() -= rv1, m1.rowwise() - rv1);
58
59 // empty objects
60 VERIFY_IS_EQUAL((m1.template block<0,Dynamic>(0,0,0,cols).colwise().sum()), RowVectorType::Zero(cols));
61 VERIFY_IS_EQUAL((m1.template block<Dynamic,0>(0,0,rows,0).rowwise().sum()), ColVectorType::Zero(rows));
62 VERIFY_IS_EQUAL((m1.template block<0,Dynamic>(0,0,0,cols).colwise().prod()), RowVectorType::Ones(cols));
63 VERIFY_IS_EQUAL((m1.template block<Dynamic,0>(0,0,rows,0).rowwise().prod()), ColVectorType::Ones(rows));
64
65 VERIFY_IS_EQUAL(m1.block(0,0,0,cols).colwise().sum(), RowVectorType::Zero(cols));
66 VERIFY_IS_EQUAL(m1.block(0,0,rows,0).rowwise().sum(), ColVectorType::Zero(rows));
67 VERIFY_IS_EQUAL(m1.block(0,0,0,cols).colwise().prod(), RowVectorType::Ones(cols));
68 VERIFY_IS_EQUAL(m1.block(0,0,rows,0).rowwise().prod(), ColVectorType::Ones(rows));
69

Callers 1

EIGEN_DECLARE_TESTFunction · 0.85

Calls 12

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
blockMethod · 0.45
coeffRefMethod · 0.45

Tested by

no test coverage detected