我想测试一些最新的稀疏线性求解器,想知道是否有一种快速填充矩阵的方法。我感兴趣的格式是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)来获取行的开头。然后,我将需要遍历元素列(rowIndex(i):rowIndex(i+1)-1)以查找j位于哪里。
问题:
在CSR格式下,是否有一种更快地访问元素的方法,而无需每次更新元素时进行搜索?
一些澄清: 我只需要从头开始填充矩阵。该矩阵在结构上是对称的,但实际上并不对称。保存的值与网络数据(阻抗、电阻等)有关,它们具有实际值。通常情况下,Value(i,j)<>Value(j,i)。我有形式为(name1,i1,j1,value1),(name2,i2,j2,value2)等的元组。这些元组未排序,并且2个元组可能引用相同的i,j值,这意味着它们需要相加
提前感谢!
(行,列)
索引,并将矩阵条目添加到动态稀疏结构中。我通常使用插入排序和排序列表来完成此操作,实践证明这是最快的方法。它也比三元组转换为 CRS 更快,并且使用更少的内存。请参见这里 以获取我在类似主题上的其他答案。 - angainor