gpt4 book ai didi

c++ - 用 std::vector 初始化 Eigen::vector

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:09 74 4
gpt4 key购买 nike

我以前看过它,但我不记得如何使用相同长度的 std::vector 有效地初始化已知长度的 Eigen::Vector 。这是一个很好的例子:

std::vector<double> v1 = {1.0, 2.0, 3.0};

Eigen::Vector3d v2; // Do I put it like this in here: v2(v1) ?
v2 << v1[0], v1[1], v1[2]; // I know you can do it like this but
// I am sure i have seen a one liner.

我仔细阅读了this有关高级矩阵初始化的页面,但没有明确说明执行此操作的方法。

最佳答案

根据 Eigen Doc,Vector是 Matrix 的 typedef,而 Matrix 有一个 constructor具有以下签名:

Matrix (const Scalar *data)

Constructs a fixed-sized matrix initialized with coefficients starting at data.

vector referencestd::vector::data 定义为:

std::vector::data

T* data();
const T* data() const;

Returns pointer to the underlying array serving as element storage. The pointer is such that range [data(); data() + size()) is always a valid range, even if the container is empty.

因此,您可以将 vector 的数据作为 Vector3d 构造函数参数传递:

Eigen::Vector3d v2(v1.data());

此外,从 Eigen 3.2.8 开始,上述构造函数定义为:

template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
inline Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>
::Matrix(const Scalar *data)
{
this->_set_noalias(Eigen::Map<const Matrix>(data));
}

如您所见,它还使用了 Eigen::Map,正如@ggael 和@gongzhitaao 所指出的那样。

关于c++ - 用 std::vector 初始化 Eigen::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34278324/

74 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com