【问题标题】:Eigen difference between Vector, VectorX, VectorXiVector,VectorX,VectorXi之间的特征差异
【发布时间】:2020-09-18 19:51:46
【问题描述】:

上下文

我正在尝试为int 找到最佳的一维存储类型。我计划将 Eigen::Vector 对象用作“索引容器”(即存储代表较大向量索引的 int 值),然后稍后对这些“索引容器”进行一些自定义验证。虽然我可以从这个“索引容器”中删除值,但我永远不会向它添加新值:所以size 将永远是 n

但是我注意到有几个不同的Eigen::Vector typedefs,文档没有说明它们的区别。我可以从 typedef 的签名中得到一个想法,但很大程度上仍然不确定哪个是合适的。

  1. Eigen::Vector

  2. Eigen::VectorX

  3. Eigen::VectorXi

有人可以解释一下这些 typedef 的主要区别吗,我有一些想法,例如VectorXi 的“i”代表int

编辑

已经请求了我所说的“索引容器”的示例:

假设我有一个布尔向量,其值为 {true, false, true, true, false}

据此,我的索引容器将具有值 {0, 2, 3}

这个问题的重点是找出索引容器的最佳特征对象类型

编辑 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】:

    没有 typdef Eigen::VectorEigen::VectorX。此类便捷类型定义的格式为Eigen::VectorNt,其中Nt 的可能选择在Eigen documentation 中进行了描述:

    方便的类型定义

    Eigen 定义了以下 Matrix 类型定义:

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

    【讨论】:

    • 谢谢!我什至没有想过要查看矩阵部分。一个例子是我存储一个布尔向量的所有索引都是真的,例如{true, false, true} = {0, 2}(索引容器)。
    猜你喜欢
    • 2020-10-02
    • 2019-04-16
    • 2019-06-18
    • 2019-09-24
    • 2019-07-07
    • 2015-05-19
    • 1970-01-01
    • 2015-01-17
    • 2018-03-25
    相关资源
    最近更新 更多