为什么 Eigen 不解析内置符号? (所有,最后,seq,等等...)
Why Eigen does not resolve built-in symbols? (all, last, seq, etc...)
我有这段代码来自 Eigen documentation 站点关于切片和非索引化的代码:
#include <iostream>
#include <Eigen/Dense>
#include <vector>
using namespace std;
using namespace Eigen;
int main() {
std::vector<int> ind{4,2,5,5,3};
MatrixXi A = MatrixXi::Random(4,6);
cout << "Initial matrix A:\n" << A << "\n\n";
cout << "A(all,ind):\n" << A(all,ind) << "\n\n";
return 0;
}
当我尝试编译时,出现多个错误,例如:
all
不是 Eigen
的成员
all
未在此范围内声明
last
未在此范围内声明
seq
不是 Eigen
的成员
- 函数
seq
无法解析
MatrixXi::Random
无效参数
如何修复这些错误?
看来我的 Eigen 版本不对(有效 here), however, according to this 我的答案是:
EIGEN_WORLD_VERSION 3
EIGEN_MAJOR_VERSION 3
EIGEN_MINOR_VERSION 7
,
我相信这是最新的。
就安装而言,我将 Eigen
文件夹复制到项目位置,并为 上面的一个文件夹 提供了一个路径(-I 标志)一个 g++ 编译器。图书馆本身似乎运作良好;例如,此代码(来自提供的示例)工作正常:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
Matrix3d m = Matrix3d::Random();
m = (m + Matrix3d::Constant(1.2)) * 50;
cout << "m =" << endl << m << endl;
Vector3d v(1,2,3);
cout << "m * v =" << endl << m * v << endl;
}
您的问题可能是 g++
的 -I
选项
我怀疑你有类似的东西:
g++ .... -I<path_to_project>/Eigen
... 而它应该只是
g++ .... -I<path_to_project>
...即最终的 Eigen
目录不应位于包含路径中。
进行此更改,然后还更改源代码,以便所有包含如下:
#include <Eigen/Dense>
#include <Eigen/Cholesky>
此外,您指的是一个变量 all
但您的程序尚未定义它。
还要确保至少启用 c++11 编译器选项。
编辑:
为了完整起见,我添加了评论中出现的答案。
OP问题中的文档指的是不支持符号all
、last
、seq
的3.3.9版本。对于最新的稳定 (3.3.7) 版本,必须使用 block
or reshape
运算符。
这里的教训是:始终检查文档版本是否与所用库的版本匹配。
我有这段代码来自 Eigen documentation 站点关于切片和非索引化的代码:
#include <iostream>
#include <Eigen/Dense>
#include <vector>
using namespace std;
using namespace Eigen;
int main() {
std::vector<int> ind{4,2,5,5,3};
MatrixXi A = MatrixXi::Random(4,6);
cout << "Initial matrix A:\n" << A << "\n\n";
cout << "A(all,ind):\n" << A(all,ind) << "\n\n";
return 0;
}
当我尝试编译时,出现多个错误,例如:
all
不是Eigen
的成员
all
未在此范围内声明last
未在此范围内声明seq
不是Eigen
的成员
- 函数
seq
无法解析 MatrixXi::Random
无效参数
如何修复这些错误?
看来我的 Eigen 版本不对(有效 here), however, according to this 我的答案是:
EIGEN_WORLD_VERSION 3
EIGEN_MAJOR_VERSION 3
EIGEN_MINOR_VERSION 7
,
我相信这是最新的。
就安装而言,我将 Eigen
文件夹复制到项目位置,并为 上面的一个文件夹 提供了一个路径(-I 标志)一个 g++ 编译器。图书馆本身似乎运作良好;例如,此代码(来自提供的示例)工作正常:
#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;
using namespace std;
int main()
{
Matrix3d m = Matrix3d::Random();
m = (m + Matrix3d::Constant(1.2)) * 50;
cout << "m =" << endl << m << endl;
Vector3d v(1,2,3);
cout << "m * v =" << endl << m * v << endl;
}
您的问题可能是 g++
的-I
选项
我怀疑你有类似的东西:
g++ .... -I<path_to_project>/Eigen
... 而它应该只是
g++ .... -I<path_to_project>
...即最终的 Eigen
目录不应位于包含路径中。
进行此更改,然后还更改源代码,以便所有包含如下:
#include <Eigen/Dense>
#include <Eigen/Cholesky>
此外,您指的是一个变量 all
但您的程序尚未定义它。
还要确保至少启用 c++11 编译器选项。
编辑:
为了完整起见,我添加了评论中出现的答案。
OP问题中的文档指的是不支持符号all
、last
、seq
的3.3.9版本。对于最新的稳定 (3.3.7) 版本,必须使用 block
or reshape
运算符。
这里的教训是:始终检查文档版本是否与所用库的版本匹配。