本征“稀疏矩阵格式”示例是否包含错误?

时间:2019-06-22 20:00:44

标签: c++ eigen

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进行的吗?)...

1 个答案:

答案 0 :(得分:1)

关键是用户应该根据需要在每列中保留至少尽可能多的条目。在此示例中,用户仅为第二列保留2个条目,因此,如果您尝试向该列添加另一个条目,则可能需要昂贵的重新分配,或者至少需要进行复杂的转换才能“窃取”未使用的条目。另一列。 (我不知道这是如何实现的。)

粗略地看一下您链接到的文档,我没有看到关于移动条目的任何信息。我不确定Eigen是否支持这种操作。 (如果我错了,请纠正我。)我也不知道您为什么要这么做。

您的最后一个问题可能太广泛了。我不是Eigen的专家,但它似乎是一个成熟,强大且有据可查的库。如果在编译示例时遇到任何特定问题,则应在此处或在Eigen特定论坛上发布它们。 scicomp.SE的许多人都精通Eigen并能适应。