[英]Convert Eigen::Matrix to vector using std::move on Eigen::Matrix::data()
[英]How to convert an std::vector to a matrix in Eigen?
我對 Stack Overflow 和 C++ 有點陌生,所以請隨時糾正我的代碼中的任何錯誤和這個問題的格式。
我正在嘗試使用涉及矩陣轉置和向量(及其逆)乘法的正規方程制作線性回歸計算器。 該程序應該從 csv 文件中讀取並將該文件中的信息傳遞到矩陣中並計算回歸線。 為了簡化工作,我決定使用一個名為 Eigen 的庫來進行矩陣-矩陣乘法。
我遇到的問題是Map
function 只能接受數組而不是 std::vector。
這是我到目前為止所擁有的:
float feature_data[] = { 1, 1, 1, 1, 1, 1,
2, 4.5, 3, 1,4, 5};
float labels[] = { 1, 4, 3, 2, 5, 7 };
//maps the array to a matrix called "feature_data"
MatrixXf mFeatures = Map< Matrix<float, 6, 2> >(feature_data);
MatrixXf mLabels = Map< Matrix<float, 6, 1> >(labels);
//use the toArray function
std::vector<float> test_vector = { 2,1,3 };
float* test_array = toArray(test_vector);
calcLinReg(mFeatures, mLabels);
const int n = 2;
int arr[n];
system("pause");
對於上下文,toArray function 是我從向量中創建數組的不成功嘗試(老實說,它可以工作,但它返回一個指針,您不能將其傳遞到 Eigen 中的Map
function。) calcLinReg
確實像它聽起來的那樣:計算線性回歸線參數。
無論如何我可以將向量轉換為數組或將向量轉換為 Eigen 中的矩陣?
如何嘗試使用vectors data()
方法 ,該方法使您可以訪問vector內部使用的內存數組,如下所示:
std::vector<float> test_vector = { 2,1,3 };
float* test_array = test_vector.data();
Eigen::MatrixXf test = Eigen::Map<Eigen::Matrix<float, 3, 1> >(test_array);
或更短:
std::vector<float> test_vector = { 2,1,3 };
Eigen::MatrixXf test = Eigen::Map<Eigen::Matrix<float, 3, 1> >(test_vector.data());
當心指點實際上是復制數據,因此這是安全的。 但是,您也可以像這樣直接使用向量的數據
std::vector<float> test_vector(3,2);
Eigen::Map<Eigen::Matrix<float, 3, 1> > dangerousVec (test_vector.data());
如果矢量超出范圍,則內存將被釋放,並且angeredVec的數據將處於混亂狀態。
評論中有人詢問動態行數和列數的情況。 這是可能的,如下所示:
typedef Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic> MyMatrix;
size_t nrow = ...;
size_t ncol = ...;
MyMatrix M = Eigen::Map<MyMatrix>(test_vector.data(), nrow, ncol);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.