矢量、矢量X、矢量Xi之间的特征差异

问题描述 投票:0回答:1

语境

我正试图为以下数据寻找最佳的一维存储类型 int. 我计划使用Eigen::Vector对象作为 "索引容器"(即存储 int 的值),然后在以后对这些 "索引容器 "进行一些自定义验证。虽然我可能会从这个 "索引容器 "中删除值,但我永远不会向它添加新的值:所以...。size 将永远是<=。n

然而,我注意到有几种不同的 Eigen::Vector 类型定义,而文档中并没有说明其中的区别。我可以从类型定义的签名中得到一个概念,但基本上还是不确定哪一个合适。

  1. Eigen::Vector

  2. Eigen::VectorX

  3. 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

arrays vector indexing eigen
1个回答
1
投票

没有类型定义 Eigen::VectorEigen::VectorX. 这种方便类型定义的格式是 Eigen::VectorNt的可能选择,其中 Nt叙述的是 本征文件:

方便的类型定义

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 将是有用的。如果你提供一个具体的例子,将更容易提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.