SparceMatrix的本征3.3.7文档 http://eigen.tuxfamily.org/dox/group__TutorialSparse.html 稀疏矩阵格式部分似乎包含错误:
This storage scheme is better explained on an example. The following matrix
0 3 0 0 0
22 0 0 0 17
7 5 0 1 0
0 0 0 0 0
0 0 14 0 8
and one of its possible sparse, column major representation:
Values: 22 7 _ 3 5 14 _ _ 1 _ 17 8
InnerIndices: 1 2 _ 0 2 4 _ _ 2 _ 1 4
OuterStarts: 0 3 5 8 10 12
InnerNNZs: 2 2 1 1 2
如果14
从第三列移至第二列(即其索引从[4,2]更改为[4,1]),则前两个数组Values
和{ {1}},很有道理。 InnerIndices
对于OuterStarts
的位置似乎都不正确,而14
对于InnerNNZs
在矩阵的[4,2]元素中是有意义的,但不一致与14
数组。
此示例是否不正确或我缺少什么?
通常,除了检查源代码之外,找出Eigen的最佳方法是什么?我通常会查看测试和示例,但是针对稀疏矩阵构建大多数基准测试和测试会导致编译错误(这些测试是针对较早版本的Eigen编写的,而不是针对版本3进行的吗?)...
答案 0 :(得分:1)
关键是用户应该根据需要在每列中保留至少尽可能多的条目。在此示例中,用户仅为第二列保留2个条目,因此,如果您尝试向该列添加另一个条目,则可能需要昂贵的重新分配,或者至少需要进行复杂的转换才能“窃取”未使用的条目。另一列。 (我不知道这是如何实现的。)
粗略地看一下您链接到的文档,我没有看到关于移动条目的任何信息。我不确定Eigen是否支持这种操作。 (如果我错了,请纠正我。)我也不知道您为什么要这么做。
您的最后一个问题可能太广泛了。我不是Eigen的专家,但它似乎是一个成熟,强大且有据可查的库。如果在编译示例时遇到任何特定问题,则应在此处或在Eigen特定论坛上发布它们。 scicomp.SE的许多人都精通Eigen并能适应。