【问题标题】:How can I iterate on both rows and cols of a sparse matrix in Eigen?如何在 Eigen 中对稀疏矩阵的行和列进行迭代?
【发布时间】:2015-02-05 21:33:25
【问题描述】:

如何在 Eigen 中对稀疏矩阵的行和列进行迭代?

我有一个行主稀疏矩阵,我想在它上面执行这些 matlab 命令:

r=sum(H,1)

r2=sum(H,2)

其中 H 是稀疏矩阵(0,1),r 和 r2 是整数向量。我认为我必须能够在 row 和 col 上进行迭代才能做到这一点。任何建议将不胜感激。

提前致谢。

【问题讨论】:

  • H(p==1,2) 是什么意思?你的意思是 p ==1 还是 p==2?
  • @kkuilla 对不起,我搞错了。我编辑了它。当我们写 sum(H,2) 时,它返回一个向量,其中包含索引处每一行的总和,而 sum|(H,1) 返回每一列的总和。
  • 道歉,但我不明白...问题是什么?你是说要取整个矩阵的总和,然后得到一个值作为回报?
  • @kkuilla ,我想取一个向量,它的元素是每个 cols(resp. rows) 的总和,所以对于它们中的每一个,命令都会返回一个向量。

标签: c++ matlab sparse-matrix eigen eigen3


【解决方案1】:

您可能想看看非常有用的eigen / matlab 转换参考: http://eigen.tuxfamily.org/dox/AsciiQuickReference.txt

在你的情况下,它转换为:

r  = H.colwise().sum() // sum(H, 1)
r2 = H.rowwise().sum() // sum(H, 2)

编辑

正如您所指出的,稀疏矩阵不支持这些函数。您可能必须重新实现它。我建议从https://forum.kde.org/viewtopic.php?f=74&t=122971获得灵感

在你的sum(H, 1)的例子中,它可以写成:

r = H * VectorXd::Ones(H.cols())

【讨论】:

  • sparseMatrix 类没有任何成员 colwise() 或 rowwise()。
  • 当我写“VectorXd::Ones”时说 VectorXd 没有 Ones.?!!
  • 它应该是 eigen.tuxfamily.org/dox/… 之后的 Eigne::VectorXd 的一部分。尝试重现他们的例子。
猜你喜欢
  • 1970-01-01
  • 2018-11-15
  • 2023-03-16
  • 1970-01-01
  • 2019-03-12
  • 2015-07-22
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多