2014-09-29 11 views

Trả lời

19
vector<int> vec(mat.data(), mat.data() + mat.rows() * mat.cols()); 
+0

Cảm ơn bạn nó làm việc. Tôi có thể biết làm thế nào bạn đến giải pháp? –

+2

'mat.rows() * mat.cols()' có thể được đơn giản hóa thành 'mat.size()', tuy nhiên, hãy lưu ý rằng giải pháp này chỉ làm việc cho một đối tượng 'Matrix <>' đơn giản, trong khi sử dụng một 'Map <> 'như trong câu trả lời của tôi làm việc cho ma trận phụ quá. – ggael

30

Bạn không thể định kiểu, nhưng bạn có thể dễ dàng sao chép dữ liệu:

VectorXd v1; 
v1 = ...; 
vector<double> v2; 
v2.resize(v1.size()); 
VectorXd::Map(&v2[0], v1.size()) = v1; 
+0

heyy thankyou trả lời .. nhưng tôi thấy câu trả lời ở trên sạch hơn. –

+3

tốt đẹp vì nó hoạt động trên cả hai cách (từ và đến VectorXd) – Raffi

1

Bạn có thể làm điều này từ và đến Eigen vector:

//init a first vector 
    std::vector<float> v1; 
    v1.push_back(0.5); 
    v1.push_back(1.5); 
    v1.push_back(2.5); 
    v1.push_back(3.5); 

    //from v1 to an eignen vector 
    float* ptr_data = &v1[0]; 
    Eigen::VectorXf v2 = Eigen::Map<Eigen::VectorXf, Eigen::Unaligned>(v1.data(), v1.size()); 

    //from the eigen vector to the std vector 
    std::vector<float> v3(&v2[0], v2.data()+v2.cols()*v2.rows()); 


    //to check 
    for(int i = 0; i < v1.size() ; i++){ 
     std::cout << std::to_string(v1[i]) << " | " << std::to_string(v2[i]) << " | " << std::to_string(v3[i]) << std::endl; 
    } 
Các vấn đề liên quan