【问题标题】:Eigen::RowVector IteratorEigen::RowVector 迭代器
【发布时间】:2013-05-29 22:28:48
【问题描述】:

有人能告诉我到底如何迭代 Eigen::RowVectorXf 吗?

我通过网络和文档查找了 3 个小时,我只能找到from this link,我可以通过以下方式访问它:

vector(i)
vector[i]

我有一个:

auto vec = std::make_shared<Eigen::RowVectorXf>( rowIndex.size() ); 

我想用词频填充。

Eigen::RowVectorXf::InnerIterator it(vec); it; ++it

没有用,而且

Eigen::RowVectorXf::Iterator it(vec); it; ++it

不存在。

似乎唯一可行的是:

for ( int i = 0; i < vec->row( 0 ).size(); i++ )
{
    std::cout << vec->row( 0 )[i] << std::endl;
}

恕我直言,这似乎很奇怪,因为我不应该明确指向 row(0),因为这是一个 RowVector。

难道没有更干净、更快或更优雅的方式吗?

【问题讨论】:

  • 可能有帮助的一点是,在本征中没有“向量”之类的东西。特征向量是矩阵的类型定义;我引用:“Vector4f 是 4 个浮点数的向量 (Matrix) RowVector3i 是 3 个整数的行向量 (Matrix)”我仍然想遍历矩阵。我也找了几个小时;找不到任何东西。我尝试阅读源代码,这非常糟糕。

标签: c++ vector iterator eigen


【解决方案1】:

不需要 row(0),您可以使用 ->coeff(i)(不推荐,因为它会跳过断言,即使在调试模式下也是如此),或者使用 operator* 取消引用您的 shared_pointer

for(int i=0; i<vec->size(); ++i)
  cout << (*vec)[i];

您也可以使用 InnerIterator,但您必须取消引用您的 shared_pointer

RowVectorXf::InnerIterator it(*vec); it; ++it

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-22
    • 2018-11-15
    • 1970-01-01
    • 2019-05-11
    • 2010-10-27
    • 2018-05-16
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多