语境
我正试图为以下数据寻找最佳的一维存储类型 int
. 我计划使用Eigen::Vector对象作为 "索引容器"(即存储 int
的值),然后在以后对这些 "索引容器 "进行一些自定义验证。虽然我可能会从这个 "索引容器 "中删除值,但我永远不会向它添加新的值:所以...。size
将永远是<=。n
然而,我注意到有几种不同的 Eigen::Vector
类型定义,而文档中并没有说明其中的区别。我可以从类型定义的签名中得到一个概念,但基本上还是不确定哪一个合适。
Eigen::Vector
Eigen::VectorX
Eigen::VectorXi
谁能解释一下这些typedef的主要区别,我有一些想法,比如说哪一个是指 VectorXi
"i "代表 int
.
编辑
有人要求举例说明我所说的 "索引容器 "是什么意思。
想象一下,我有一个布尔向量,值是{true, false, true, true, false}。
由此,我的索引容器的值将是{0, 2, 3}。
而这个问题的重点是要找出索引容器的最佳Eigen对象种类
编辑2
不相关,但为什么要用索引容器呢?我需要执行多个不同的验证规则,这些规则是直接基于索引值的。
例如:验证1:如果cont2中的任何值小于cont1[0],则删除它们。
cont1 cont2
-- --
0, 2,
5, 3,
10, 8,
13 12,
for (i = 0; i <= cont2.size(); i++)
if cont2[i] <= cont1[0]:
cont2.remove(i)
else:
break
没有类型定义 Eigen::Vector
或 Eigen::VectorX
. 这种方便类型定义的格式是 Eigen::VectorNt
的可能选择,其中 N
和 t
叙述的是 本征文件:
方便的类型定义
Eigen定义了以下矩阵类型定义。
MatrixNt for Matrix<type, N, N>. For example, MatrixXi for Matrix<int, Dynamic, Dynamic>. VectorNt for Matrix<type, N, 1>. For example, Vector2f for Matrix<float, 2, 1>. RowVectorNt for Matrix<type, 1, N>. For example, RowVector3d for Matrix<double, 1, 3>.
其中:
N can be any one of 2, 3, 4, or X (meaning Dynamic). t can be any one of i (meaning int), f (meaning float), d (meaning double), cf (meaning complex<float>), or cd (meaning complex<double>).
这些都是密集的 Eigen::Matrix
类。
不完全清楚你说的 "索引容器 "是什么意思,它将指的是一个更大的向量的元素。索引号可以存储在一个 Eigen::VectorXi
容器,但还可以有更好的选择。如果只需要 "索引容器 "中列出的元素,而大向量的其他元素都是零,那么一个 Eigen::SparseVector
将是有用的。如果你提供一个具体的例子,将更容易提供帮助。