how to convert a matrix in dlib to a std::vector
Asked Answered
K

2

5

I have a colume vector defined in dlib. How can I convert it to std::vector?

typedef dlib::matrix<double,0,1> column_vector;
column_vector starting_point(4);
starting_point = 1,2,3,4;
std::vector x = ??

Thanks

Kandrakandy answered 4/8, 2016 at 12:13 Comment(0)
D
11

There are many ways. You could copy it via a for loop. Or use the std::vector constructor that takes iterators: std::vector<double> x(starting_point.begin(), starting_point.end()).

Doctrinaire answered 4/8, 2016 at 12:30 Comment(1)
Thanks. But shouldn't it be std::vector<Type> x(starting_point.begin(), starting_point.end())?Kandrakandy
B
1

This would be the way you normally iterate over the matrix (doesn't matter if the matrix has only 1 column):

// loop over all the rows
for (unsigned int r = 0; r < starting_point.nr(); r += 1) {
    // loop over all the columns
    for (unsigned int c = 0; c < starting_point.nc(); c += 1) {
        // do something here
    }   
}

So, why don't you iterate over your column vector and introduce each value into the new std::vector? Here is a full example:

#include <iostream>
#include <dlib/matrix.h>

typedef dlib::matrix<double,0,1> column_vector;

int main() {
    column_vector starting_point(4);
    starting_point = 1,2,3,4;

    std::vector<double> x;

    // loop over the column vector
    for (unsigned int r = 0; r < starting_point.nr(); r += 1) {
        x.push_back(starting_point(r,0));
    }

    for (std::vector<double>::iterator it = x.begin(); it != x.end(); it += 1) {
        std::cout << *it << std::endl;
    }
}
Bloodandthunder answered 4/8, 2016 at 12:48 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.