arrays - Vector,VectorX,VectorXi之间的特征差异
问题描述
语境
我正在尝试为int
. 我打算将 Eigen::Vector 对象用作“索引容器”(即存储int
表示较大向量索引的值),然后稍后对这些“索引容器”进行一些自定义验证。虽然我可能会从这个“索引容器”中删除值,但我永远不会向它添加新值:所以size
总是 <=n
但是我注意到有几个不同Eigen::Vector
的 typedefs 文档没有指定差异。我可以从 typedef 的签名中得到一个想法,但很大程度上仍然不确定哪个是合适的。
Eigen::Vector
Eigen::VectorX
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
解决方案
没有 typdefEigen::Vector
或Eigen::VectorX
. 这种方便的 typedef 的格式是Eigen::VectorNt
,其中可能的选择N
和t
在Eigen 文档中进行了描述:
方便的 typedef
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
容器中,但可能有更好的选择。如果只需要“索引容器”中列出的那些元素,并且大向量的所有其他元素都为零,那么 anEigen::SparseVector
将很有用。如果你提供一个具体的例子,它会更容易提供帮助。
推荐阅读
- ios - 我们可以通过 IOS API 在后台扫描 Ibeacons,只提供 Major 和 Minot 编号作为参数吗?
- python - 无法删除 Python3.5
- python - 如何从 Django-solo 获取对象?
- c# - 我们是否有适用于 V4 协议的 sagepay C# 直接集成工具包?
- linux - 如何在 chromebook 中从 .Desktop 文件为 linux 启动 Qt 应用程序?
- c# - C#中的MongoDB - 执行多重过滤的正确方法是什么
- javascript - 如何在 Global Jest 设置中查找别名?
- svg - inkscape:transform-center-x/y 是什么意思?
- ios - UIView 在不可见时截取屏幕截图
- python - Python:默认情况下是否可以使“打印”刷新?