C++ “艾根”是什么意思;稀疏矩阵格式;示例包含错误?
Egeng 3.3.7 SparceMatrix的文件 稀疏矩阵格式中似乎包含错误部分:C++ “艾根”是什么意思;稀疏矩阵格式;示例包含错误?,c++,eigen,C++,Eigen,Egeng 3.3.7 SparceMatrix的文件 稀疏矩阵格式中似乎包含错误部分: 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, colu
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]),则前两个数组值和内部索引
是有意义的OuterStart
对于14
位置似乎都不正确,而InnerNNZs
对于14
位于矩阵的[4,2]元素中是有意义的,但与值
数组不一致
这个例子是不正确的还是我遗漏了什么
总的来说,除了检查源代码之外,找出Eigen的最佳方法是什么?我通常会查看测试和示例,但是为稀疏矩阵构建大多数基准测试和测试会导致编译错误(这些测试是为旧版本的Eigen编写的,而不是为版本3更新的?)。关键是用户应该根据需要为每列保留至少相同数量的条目。在本例中,用户只为第二列保留了2个条目,因此如果您试图向该列添加另一个条目,则可能需要昂贵的重新分配,或者至少需要复杂的转换来“窃取”另一列中未使用的条目。(我不知道这是如何实现的。)
粗略地看一下您链接到的文档,我没有看到任何关于移动条目的内容,就像您正在尝试的那样。我不确定Eigen是否支持这样的操作。(如果我错了,请纠正我。)我也不知道你为什么要这么做
你的最后一个问题可能太宽泛了。我不是Egen的专家,但它似乎是一个成熟、功能强大、文档丰富的库。如果您在编译示例时遇到任何具体问题,您应该将其发布在此处或特定于Eigen的论坛上。很多人都精通Eigen,而且很随和 什么让你困惑?\uu
值是多少?这些只是空白,不使用,但允许快速插入。“值:22 7 3 5 14…”表示14位于第2列,而矩阵则位于第3列!否,\u
空格不是列分隔符。它们是额外的空间,便于快速插入附加值。可以将其视为在每列的基础上保留比严格需要的更多的空间。