python - octave如何创建稀疏子矩阵
问题描述
Octave 的奇妙特性之一是它如何处理稀疏矩阵。我被赋予了将一些 Octave 代码复制到 fortran 中的任务(速度至关重要),具体来说,给定一个稀疏矩阵 Sparse(nodes,nodes),我需要想出子矩阵 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 来解决线性系统。我相信 octave 的压缩列格式非常相似。
我的问题是我在哪里可以找到(a)执行 MWE 的第 4 行时发生的逻辑和(b)代码
解决方案
您正在索引一个稀疏矩阵,因此您需要查看Sparse 类,它是 C++ 中 liboctave 的一部分。您似乎正在寻找的方法是Sparse<T> Sparse<T>::index (const idx_vector& idx_i, const idx_vector& idx_j, bool resize_ok)
.
如果您打算在另一个程序上使用该实现,请注意代码的许可证是 GPLv3+。
推荐阅读
- python - Heroku 上的“'/blog/' 处的编程错误”
- python - 在我的 Tkinter 应用程序中获取无效的命令名称
- regex - 正则表达式:在字符串中查找重复项
- node.js - 如何在节点js中加密流
- java - 编写一个将 Mute 实例作为参数并修改其状态以表明该类是可变的方法
- java - 使用流在java中映射和过滤对象集合的最佳实践
- python - 使用 mod_wsgi 在 Apache 上部署 Dash 应用程序
- java - 在 Apache Components HttpClient 中设置 cookie 但无法在 HttpServletRequest 中的服务器上检索
- python - 如何在python上使用opencv对齐和提取表单(jpeg)中的不同元素?
- python - 如何在Python中将数组数组转换为单个数组