new concatVectors call
parent
ac72d1cc22
commit
bf504d30db
|
@ -238,31 +238,36 @@ namespace gtsam {
|
||||||
return make_pair(pseudo/precision, precision);
|
return make_pair(pseudo/precision, precision);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
Vector concatVectors(const std::list<Vector>& vs)
|
||||||
|
{
|
||||||
|
int dim = 0;
|
||||||
|
BOOST_FOREACH(Vector v, vs)
|
||||||
|
dim += v.size();
|
||||||
|
|
||||||
|
Vector A(dim);
|
||||||
|
int index = 0;
|
||||||
|
BOOST_FOREACH(Vector v, vs) {
|
||||||
|
for(size_t d = 0; d < v.size(); d++)
|
||||||
|
A(d+index) = v(d);
|
||||||
|
index += v.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
return A;
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
Vector concatVectors(size_t nrVectors, ...)
|
Vector concatVectors(size_t nrVectors, ...)
|
||||||
{
|
{
|
||||||
int dimA = 0;
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
list<Vector> vs;
|
||||||
va_start(ap, nrVectors);
|
va_start(ap, nrVectors);
|
||||||
Vector* V;
|
for( size_t i = 0 ; i < nrVectors ; i++) {
|
||||||
for( size_t i = 0 ; i < nrVectors ; i++)
|
Vector* V = va_arg(ap, Vector*);
|
||||||
{
|
vs.push_back(*V);
|
||||||
V = va_arg(ap, Vector*);
|
|
||||||
dimA += V->size();
|
|
||||||
}
|
}
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
va_start(ap, nrVectors);
|
return concatVectors(vs);
|
||||||
Vector A(dimA);
|
|
||||||
int index = 0;
|
|
||||||
for( size_t i = 0 ; i < nrVectors ; i++)
|
|
||||||
{
|
|
||||||
V = va_arg(ap, Vector *);
|
|
||||||
for(size_t d = 0; d < V->size(); d++)
|
|
||||||
A(d+index) = (*V)(d);
|
|
||||||
index += V->size();
|
|
||||||
}
|
|
||||||
|
|
||||||
return A;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <list>
|
||||||
#include <boost/numeric/ublas/vector.hpp>
|
#include <boost/numeric/ublas/vector.hpp>
|
||||||
#include <boost/random/linear_congruential.hpp>
|
#include <boost/random/linear_congruential.hpp>
|
||||||
|
|
||||||
|
@ -167,8 +168,12 @@ std::pair<Vector, double> weightedPseudoinverse(const Vector& v, const Vector& s
|
||||||
/**
|
/**
|
||||||
* concatenate Vectors
|
* concatenate Vectors
|
||||||
*/
|
*/
|
||||||
Vector concatVectors(size_t nrVectors, ...);
|
Vector concatVectors(const std::list<Vector>& vs);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* concatenate Vectors
|
||||||
|
*/
|
||||||
|
Vector concatVectors(size_t nrVectors, ...);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* random vector
|
* random vector
|
||||||
|
|
|
@ -120,10 +120,15 @@ TEST( TestVector, concatVectors)
|
||||||
Vector C(7);
|
Vector C(7);
|
||||||
for(int i = 0; i < 2; i++) C(i) = A(i);
|
for(int i = 0; i < 2; i++) C(i) = A(i);
|
||||||
for(int i = 0; i < 5; i++) C(i+2) = B(i);
|
for(int i = 0; i < 5; i++) C(i+2) = B(i);
|
||||||
|
|
||||||
Vector AB = concatVectors(2, &A, &B);
|
|
||||||
|
|
||||||
CHECK(AB == C);
|
list<Vector> vs;
|
||||||
|
vs.push_back(A);
|
||||||
|
vs.push_back(B);
|
||||||
|
Vector AB1 = concatVectors(vs);
|
||||||
|
CHECK(AB1 == C);
|
||||||
|
|
||||||
|
Vector AB2 = concatVectors(2, &A, &B);
|
||||||
|
CHECK(AB2 == C);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
|
|
Loading…
Reference in New Issue