如何将std :: vector转换为Eigen中的矩阵?

时间:2018-09-10 15:47:35

标签: c++ c++11 matrix vector eigen

我对Stack Overflow和C ++有点陌生,因此可以随时纠正我的代码中的所有错误以及此问题的格式。

我正在尝试使用包含矩阵的转置和向量(及其逆数)乘法的法线方程制作线性回归计算器。该程序应该从csv文件中读取并将该文件中的信息传递到矩阵中并计算回归线。为了简化工作,我决定使用一个名为Eigen的库进行矩阵矩阵乘法。

我遇到的问题是1.FromAsyncCoreLogic(IAsyncResult iar, Func函数只能接受数组,而不是std :: vector。

这是我到目前为止所拥有的:

1 endAction, Task

对于上下文,toArray函数是我从向量创建数组的尝试,但未成功(实际上,它可以工作,但它返回的指针是您无法传递给Eigen中的1.get_Result() at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Threading.Tasks.ValueTask函数的。) 1 creationTask) at System.Threading.Tasks.ValueTask确实听起来像:计算线性回归线参数。

反正我可以在Eigen中将向量转换为数组或将向量转换为矩阵吗?

1 个答案:

答案 0 :(得分:3)

如何尝试使用向量data() method,它使您可以访问向量内部使用的内存阵列,如下所示:

    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的数据将处于混乱状态。