在 CHOLMOD 或 SuiteSparseQR 中创建稀疏矩阵
在 SparseSuiteQR 中,我可以找到的所有示例都使用 stdin 或读取的文件创建稀疏矩阵。有人可以提供一个如何直接在 C++ 中创建一个简单的示例吗?
更好的是,在 CHOLMOD 文档中,提到了 matlab 中可用的稀疏2函数,其行为与稀疏函数相同。这可以在C++中使用吗?
In SparseSuiteQR, all of the examples I can find use stdin or a file read to create a sparse matrix. Could someone provide a simple example of how to create one directly in C++?
Even better, in the CHOLMOD documentation, there is mention of a sparse2 function available in matlab, which behaves the same as the sparse. Can this be used in C++?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
SuiteSparseQR 使用的数据结构(例如 cholmod_sparse)在 CHOLMOD 库中定义。您可以在 CHOLMOD 文档中找到有关它的更多信息,该文档比 SuiteSparseQR 中的文档大得多。
The data structures used by SuiteSparseQR (e.g. cholmod_sparse) are defined in the CHOLMOD library. You can find more information about it on the CHOLMOD documentation, which is much larger than the one from SuiteSparseQR.
我假设您尝试解决线性系统,请参阅 Tim Davies 的 CSparse 包,或者 boost 矩阵库,它也具有与 umfpack 和一些 lapack 函数接口的数字绑定 AFAIK...
I am assuming that you try to solve a linear system, see the CSparse package from Tim Davies, or boost matrix libraries which also have numeric bindings which interface umfpack and some lapack functions AFAIK...
CHOLMOD 是一个非常棒的项目 - 感谢 Tim Davis :)
令人惊讶的是 GitHub 上有很多使用 CHOLMOD 的代码,但是你必须登录 GitHub 并知道你在寻找什么!
因此,在爬取 CHOLMOD 文档和源代码,然后在 GitHub 中搜索使用 CHOLMOD 的源代码之后,您就会知道该怎么做。
但对于大多数想要/需要一个简单示例的开发人员来说,如下所示。
*请注意,您的情况可能会有所不同,具体取决于您编译 SuiteSparse 的方式。
(您可能需要使用
cholmod_
变体(不带l
),即不是cholmod_l_
;并使用int
用于索引,而不是long int
)。假设您已成功编译 SuiteSparse 并将
example.cpp
保存在基本目录中,则以下内容应该有效(在 Linux 上):输出:
CHOLMOD is a pretty awesome project - thanks Tim Davis :)
There is surprisingly a lot of code on GitHub that makes use of CHOLMOD, but you have to be logged into GitHub and know what you're looking for!
So, after crawling through CHOLMOD documentation and source code and then searching through GitHub for source code that uses CHOLMOD you would find out what to do.
But for most developers who want/need a quick example, here it is below.
*Note that your mileage might vary depending on how you compiled SuiteSparse.
(You might need to use the
cholmod_
variant (without thel
), i.e. notcholmod_l_
; and useint
for indexing, notlong int
).Supposing you have compiled SuiteSparse successfully and you have saved
example.cpp
in the base directory, then the following should work (on Linux):Output: