八度如何创建稀疏子矩阵

Octave的奇妙功能之一是它如何处理稀疏矩阵。我已经完成了将一些Octave代码复制到fortran中的任务(速度至关重要),具体来说,鉴于稀疏矩阵Sparse(节点,节点),我需要提出子矩阵SubSparse(afew,afew):


r=4;c=6;k=5;nz=r*k;

Sparse=spalloc(r,c,nz);

Sparse(1,1)=1;Sparse(1,2)=2;Sparse(3,5)=4;Sparse(4,6)=6;

SubSparse=Sparse([1,4],[1,6])

完整的矩阵为:


Sparse

1.000 2.000 0.000 0.000 0.000 0.000

0.000 0.000 0.000 0.000 0.000 0.000

0.000 0.000 0.000 0.000 4.000 0.000

0.000 0.000 0.000 0.000 0.000 6.000


SubSparse

1.000 0.000

0.000 6.000

我已经读过了,这个


我不能做的一件事是重新创建完整的矩阵,因为它们太大而无法放入机器中。


在稀疏矩阵的fortran实现中,我使用Hartwell-Boeing存储,这是由我对SuperLU求解线性系统的要求所决定的。我相信八度的压缩列格式非常相似。


我的问题是,在哪里可以找到(a)执行MWE的第4行时发生的逻辑,以及(b)代码


尚方宝剑之说
浏览 170回答 1
1回答

扬帆大鱼

您正在索引一个稀疏矩阵,因此需要查看Sparse类,它是C ++中liboctave的一部分。您似乎正在寻找的方法是Sparse<T> Sparse<T>::index (const idx_vector& idx_i, const idx_vector& idx_j, bool resize_ok)。如果您打算在另一个程序上使用该实现,请注意该代码的许可证,即GPLv3 +。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python