使用特征库填充动态向量
Fill dynamic vector using EIGEN library
我必须使用 EIGEN 在 for 循环中用值填充向量。我正在尝试这样的事情...
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main(){
VectorXd s;
for (int i=0,i<10;i++){
s(i) = (double) i;
}
return 0;
}
我可以编译它,但是当我运行程序时出现此错误:
dynamic:/usr/include/Eigen/src/Core/DenseCoeffsBase.h:425: Eigen::D enseCoeffsBase::Scalar& Eigen::D enseCoeffsBase::operator()(Eigen::Index) [with Derived = Eigen::Matrix;Eigen::D enseCoeffsBase::Scalar = double;Eigen::Index = int]:断言"index>= 0 && index
我知道我可以使用 std::vector 类轻松实现这一点,但我想用 eigen 来做到这一点,因为在那之后我必须做很多矩阵运算。
谢谢!
编辑:对于我的应用程序,我不知道编译时矢量的大小。我想找出是否有任何类似的方法,例如本征中的vector::push_back
。
您忘记为向量保留空间。这对std::vector
也是如此。
试试这个
#include <Eigen/Dense>
#include <iostream>
int main()
{
// resize to 10 elements
auto vec = Eigen::VectorXd(10);
for (int i = 0; i < vec.size(); ++i) {
vec[i] = i;
}
std::cout << vec << 'n';
}
正如
@Maikel建议的那样。我可以使用调整大小功能解决我的问题,如下所示;
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main(){
VectorXd s;
for (int i=0,i<10;i++){
s.resize(i+1);
s(i) = (double) i;
}
return 0;
}
@Jonas让我意识到我在循环之前知道向量的大小,所以我可以在循环前调整一次大小。
关于 Eigen文档中的调整大小函数可以在 Eigen 中找到:
"如果实际矩阵大小没有变化,则 resize() 方法是无操作的;否则它是破坏性的:系数的值可能会改变。如果你想要一个不改变系数的 resize() 的保守变体,请使用 conservativeResize() "
因此,最好使用 conservativeResize() 来确保值不会丢失。
相关文章:
- std::向量与传递值的动态数组
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- C++字符串数组的动态向量
- 是否可以使用宏来访问动态数组或向量中的元素或为其赋值
- 动态分配特征向量的模因
- 在存储库中,筛选器函数返回动态向量或其他存储库
- 超载添加操作员和动态向量的分割故障
- 聚集,模板和动态向量
- C++中的特征库有一个动态向量或矩阵吗
- 使用特征库填充动态向量
- C++对的动态向量
- 一维数组是否比特征动态向量快
- 如何在C++中将文本文件读入两个动态向量
- 了解我有多少内存可用于一个动态向量c++
- 指向对象的指针的向量的动态向量,C++
- 动态向量的期望内容
- 初始化动态向量列表
- 真正的动态向量类型
- 在遍历动态向量时使用auto的异常行为
- 动态向量的特征库内存使用情况