std::vector<double> eigenToStdVector(const Eigen::VectorXd& eigenV, int initialPose, int length) { if ( length == - 1) length = eigenV.size() - initialPose; std::vector<double> stdVector(length); for (int i = initialPose; i < initialPose + length; ++i) stdVector[i - initialPose] = eigenV[i]; return stdVector; }
std::vector<double> vispToStdVector(const vpColVector& vpVector, int initialPose, int length) { if ( length == - 1) length = vpVector.size() - initialPose; std::vector<double> stdVector(length); for (int i = initialPose; i < initialPose + length; ++i) stdVector[i - initialPose] = vpVector[i]; return stdVector; }
typename aol::Vector<_DataType>::RealType aol::Vector<_DataType>::getMedianValue ( ) const { const int sz = this->size(); std::vector< DataType > stdVector ( sz ); for ( int i = 0; i < sz; ++i ) { stdVector[i] = (*this)[i]; } std::sort ( stdVector.begin(), stdVector.end() ); RealType ret; if ( sz == 0 ) { throw aol::Exception ( "Cannot compute median of empty vector", __FILE__, __LINE__ ); } else if ( sz % 2 == 1 ) { // for odd size, take central value ret = static_cast<RealType> ( stdVector[ sz/2 ] ); } else { // for even size, take arithmetic mean of two central values ret = static_cast<RealType> ( stdVector[ sz/2 - 1 ] + stdVector [ sz/2 ] ) / 2; } return ( ret ); }