我想测试一些较新的稀疏线性求解器,我想知道是否有一种快速填充矩阵的方法。我感兴趣的格式是 CSR (http://goo.gl/hLXYd)。假设 CSR 格式的矩阵由下式给出:
values(num non-zero elements)
columns(num non-zero elements)
rowIndex(num rows + 1)
所考虑的稀疏矩阵来自网络。所以,我有数千个节点,其中一些节点通过线连接。因此,矩阵在结构上是对称的。每个连接 (i,j) 向对角项 (i,i) 和 (j,j) 以及非对角项 (i,j) 和 (j,i) 添加一些内容。我可以在相同的节点 (i,j,1)、(i,j,2) 之间有多个连接...因此,我可能需要多次重新访问 2 个对角线和 2 个非对角线元素。
我知道我可以通过执行 rowIndex(i) 来获得行的开头。然后,我必须遍历元素 columns(rowIndex(i):rowIndex(i+1)-1) 才能找到 j 的位置。
问题:
有没有一种方法可以在 CSR 格式中更快地访问元素,而无需每次我想更新元素时都进行搜索?
一些澄清:我只需要从头开始填写矩阵。矩阵在结构上是对称的,并不是真正对称的。保存的值与网络数据(阻抗、电阻等)有关,它们具有真实值。一般来说,价值(i,j)<>价值(j,i)。我有 (name1,i1,j1,value1), (name2,i2,j2,value2) 等形式的元组。这些元组没有排序,2 个元组可以引用相同的 i,j 值,这意味着它们需要被添加
提前致谢!